如何修改lambda函数内的变量?

我想做这样的事情:

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

最佳答案 在lambda函数体中只允许
expressions; a = b是
augmented assignment statement,当编译时,这将导致语法错误,因为语法不允许它.

你可以改变它只是返回添加:

lambda a,b: a+b

然后继续设置调用它的结果:

a = y(aVariable,bVariable)

您当然可以使用用于该操作的函数.虽然你可以直接做lambda a,b:a .__ iadd __(b),但这很笨重,使用这样的dunders并不是最好的做法.相反,您应该使用运算符模块中的相应操作.

如果你真的需要,The iadd function from operator允许你绕过这个“限制”.函数调用是表达式,因此,允许它们在lambda函数的主体中使用它们.需要简单导入:

from operator import iadd

然后,重新定义传递给myFunc的lambda以使用iadd:

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

将所有这些添加在一起,同时在myFunc和main中添加适当的返回:

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.

点赞