如何在lambda函数中修改变量?

2024-04-20 12:50:57 发布

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

我试着这样做:

def myFunc(y):
    aVariable = "a"
    bVariable = "b"
    y(aVariable,bVariable)

def main():
    myFunc(lambda a,b: a+=b)

并期望输出为"ab"。你知道吗

相反,我得到以下错误:

File "<stdin>", line 7
  myFunc(lambda x, y: x += y)
                        ^
SyntaxError: invalid syntax

Tags: lambdaabmaindef错误stdinlinemyfunc
1条回答
网友
1楼 · 发布于 2024-04-20 12:50:57

lambda函数体中只允许expressionsa += baugmented assignment statement,编译时,这将导致SyntaxError,因为语法不允许它。你知道吗

您可以将其更改为只返回加法:

lambda a,b: a+b

然后继续将调用结果适当地设置为a

a = y(aVariable,bVariable)

当然,您可以使用用于该操作的函数。虽然你可以直接做lambda a, b: a.__iadd__(b),但这是笨拙的,像这样使用扣篮不是最好的做法。相反,您应该使用来自operator模块的适当操作。你知道吗

The ^{} function from ^{}允许您在确实需要时绕过此“限制”。函数调用是表达式,因此允许在lambda函数体中使用它们。需要一个简单的import

from operator import iadd

然后,重新定义传递给myFunclambda以使用iadd

myFunc(lambda a,b: iadd(a, b))

将所有这些加在一起,同时在myFuncmain中添加适当的return

from operator import iadd

def myFunc(y):
    aVariable = "a"
    bVariable = "b"
    return y(aVariable,bVariable)

def main():
    return myFunc(lambda a,b: iadd(a, b))

当调用main时,结果是ab。你知道吗

相关问题 更多 >