我正在尝试做这样的事情:
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
答案 0 :(得分:7)
lambda
函数的正文中只允许expressions; a += b
是augmented 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
。