Python 在一个函数中调用2个函数
问题如下: 编写一个函数组合,将两个函数作为参数,我们称它们为Python 在一个函数中调用2个函数,python,function,python-3.x,Python,Function,Python 3.x,问题如下: 编写一个函数组合,将两个函数作为参数,我们称它们为Fa和Fb,并返回一个函数Fres,这意味着来自另一个函数的outdata是第一个函数的indata,例如:Fres(x)=Fa(Fb(x))。 运行示例: >>> def multiply_five(n): ... return n * 5 ... >>> def add_ten(x): ... return x + 10 ... >>> composition = compos
Fa
和Fb
,并返回一个函数Fres
,这意味着来自另一个函数的outdata是第一个函数的indata,例如:Fres(x)=Fa(Fb(x))
。
运行示例:
>>> def multiply_five(n):
... return n * 5
...
>>> def add_ten(x):
... return x + 10
...
>>> composition = compose(multiply_five, add_ten)
>>> composition(3)
65
>>> another_composition = compose(add_ten, multiply_five)
>>> another_composition(3)
25
因此,据我所知,如果我发送3,函数compose将取3+10=13
之后,将结果发送到乘法函数中,它将执行:13*5是65。
这是我迄今为止编写的代码:
def multiply_five(n):
return n*5
def add_ten(x):
return x+10
def compose(func1, func2):
def comp(arg):
return func2(arg)
return func1(comp(arg))
我遇到编译错误,我尝试了一些不同的方法:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
合成=合成(乘五,加十)
文件“C:\Users\Jim\Desktop\tdp002\5h.py”,第10行,在compose中
返回函数1(组件(参数))
NameError:未定义名称“arg”
您还不想调用func1
或func2
;您只需要返回一个将同时调用它们的函数
def compose(func1, func2):
def _(*args, **kw):
return func1(func2(*args, **kw))
return _
您也可以使用lambda
表达式来创建组合函数
def compose(func1, func2):
return lambda *args, **kw: func1(func2(*args, **kw))
试试这个:
def compose(func1, func2):
def comp(arg):
return func1(func2(arg))
return comp
如错误所述,
arg
尚未在该点定义。它应该是什么<代码>功能1<代码>功能2?某些数据结构或包含这两者的其他对象?hmm仍然会得到:args未定义为什么不干脆def compose(func1,func2,n):return func1(func2(n))
?@Ev.Kounis,因为compose
只将这两个函数作为其参数,它必须返回组合函数。@PM2Ring哦,我明白了。我看错了问题。我把*kw作为无效语法,kw代表什么?kw
只是一个任意的名称;我有一个打字错误,忘记了第二个*
。lambda funktion工作得更好,正如作业所说,但我仍然不明白**kw是什么?好的,我明白了,谢谢你非常感谢!是的,这只是根据它所期望的参数将其推广到任何可能的函数func2
。唯一的限制是func1
必须采用单个参数,即func2
返回的任何参数。将组合泛化为允许为func1
提供多个参数和/或关键字参数是Python没有内置函数组合的一个原因(IMO)。