Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一个函数中调用2个函数_Python_Function_Python 3.x - Fatal编程技术网

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)。