假设我们有两个已定义的函数对象
add1 = lambda x: x+1
和
square = lambda x: x*x
现在我想要一个调用并添加这两个函数结果的函数 我认为可行的是:
def addFuncs(f,g):
f+g
addFuncs(add1,square)(10)
我认为会给我一个111(10 * 10 + 10 + 1)的答案
但那只是给了我一个错误TypeError: unsupported operand type(s) for +: 'function' and 'function'
所以我试过了:
def addFunctions(f, g):
def getf():
return f
def getg():
return g
return getf() + getg()
但仍无济于事...... 但是,如果我这样做
def addFunctions(f, g):
return f
它弹出100,所以它似乎在返回时评估函数,但我无法弄清楚如何让它首先评估函数然后对它们进行操作。
任何帮助将不胜感激!
EDIT
明白了!
def addFunctions(f, g):
return lambda x: f(x) + g(x)
答案 0 :(得分:3)
def addFuncs(f,g):
return lambda x: f(x) + g(x)
addFuncs(add1,square)(10)
Python不支持将两个尝试一起尝试的功能添加到一起。相反,您需要创建一个新函数,例如使用lambda调用原始函数。
答案 1 :(得分:1)
如果您改为调用这些函数然后添加其返回值,而不是尝试自己添加它们,那么您的原创想法将会有效;
def addFuncs(f,g,x):
f(x) + g(x)
这是因为 f 和 g 实际上是LambdaTypes,而()运算符会调用它们,允许+运算符添加其返回值。当你直接对它们使用+运算符时,+运算符不知道如何添加两个LambdaTypes。
修改强> 多补充一点;原因
def addFunctions(f, g):
def getf():
return f
def getg():
return g
return getf() + getg()
不起作用是因为你再次尝试将两个函数对象加在一起。但是,你的例子
def addFunctions(f, g):
return f
将起作用,因为这将只返回另一个函数对象,然后在语句中使用值为10的参数调用
addFuncs(add1,square)(10)
答案 2 :(得分:0)
addFuncs
将任意多个函数作为输入并返回一个函数:
def addFuncs(*funcs):
def _addFuncs(*args):
return sum(f(*args) for f in funcs)
return _addFuncs
add1 = lambda x: x+1
square = lambda x: x*x
print(addFuncs(add1,square)(10))
产量
111