假设我们有两个定义的函数对象
add1 = lambda x: x+1
以及
^{pr2}$现在我想要一个函数,它调用并加上这两个函数的结果。
我认为有效的方法是:
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,所以它似乎在返回时对函数求值,但我不知道如何让它先对函数求值,然后再对它们进行操作。
任何帮助将不胜感激!在
编辑
知道了!在
def addFunctions(f, g):
return lambda x: f(x) + g(x)
Python不支持将函数添加到一起,而您的两次尝试都是这样做的。相反,您需要创建一个新函数,例如使用lambda来调用原始函数。在
如果您改为调用这些函数,然后添加它们的返回值,而不是尝试自己添加它们,那么您的原始想法将起作用
这是因为f和g实际上是LambdaTypes,并且()运算符调用它们,允许+运算符添加它们的返回值。当您直接对它们使用+运算符时,+运算符不知道如何添加两个lambdataype。在
编辑 再加一点;理由
^{pr2}$不起作用是因为你,再一次,试图把两个函数对象加在一起。但是,你的例子
将有效,因为这将简单地返回另一个函数对象,然后在语句中使用值为10的参数调用该对象
addFuncs
以任意多个函数作为输入并返回一个函数:收益率
^{pr2}$相关问题 更多 >
编程相关推荐