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

时间:2016-12-08 10:00:37

标签: python python-3.x 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

1 个答案:

答案 0 :(得分:7)

lambda函数的正文中只允许expressions; a += baugmented assignment statement,在编译时会导致SyntaxError,因为语法不允许它。

您可以将其更改为只返回添加内容:

lambda a,b: a+b

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

a = y(aVariable,bVariable)

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

The iadd function from operator允许您绕过此限制&#34;如果你真的需要。 函数调用是表达式 ,因此,允许它们在lambda函数的主体中使用它们。需要一个简单的import

from operator import iadd

然后,重新定义传递给lambda的{​​{1}}以使用myFunc

iadd

将所有这些加在一起,同时在myFunc(lambda a,b: iadd(a, b)) return中添加适当的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)) 时产生ab