我想做这样的事情:
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.