在Python中从函数内部计算函数对象

2024-06-02 05:03:13 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有两个定义的函数对象

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)

Tags: 对象方法lambda函数return定义deffunction
3条回答
def addFuncs(f,g):
    return lambda x: f(x) + g(x)

addFuncs(add1,square)(10)

Python不支持将函数添加到一起,而您的两次尝试都是这样做的。相反,您需要创建一个新函数,例如使用lambda来调用原始函数。在

如果您改为调用这些函数,然后添加它们的返回值,而不是尝试自己添加它们,那么您的原始想法将起作用

def addFuncs(f,g,x):
    f(x) + g(x)

这是因为fg实际上是LambdaTypes,并且()运算符调用它们,允许+运算符添加它们的返回值。当您直接对它们使用+运算符时,+运算符不知道如何添加两个lambdataype。在

编辑 再加一点;理由

^{pr2}$

不起作用是因为你,再一次,试图把两个函数对象加在一起。但是,你的例子

def addFunctions(f, g):
    return f

将有效,因为这将简单地返回另一个函数对象,然后在语句中使用值为10的参数调用该对象

addFuncs(add1,square)(10)

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

收益率

^{pr2}$

相关问题 更多 >