我正在尝试做这样的事情:
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
;a += b
是增强的赋值语句,在编译时,SyntaxError
由于语法不允许,因此将导致。
您可以将其更改为仅返回加法:
lambda a,b: a+b
然后继续将调用它的结果设置为a
适当的:
a = y(aVariable,bVariable)
您当然可以求助于该操作所使用的功能。尽管您可以直接进行操作lambda a, b: a.__iadd__(b)
,但是这样做很笨拙,使用像这样的dunder并不是最佳实践。相反,您应该使用operator
模块中的适当操作。
从iadd
功能开始operator
,如果您确实需要,可以绕过此“限制”。函数调用是表达式,因此,可以在lambda函数的主体中使用它们。import
需要一个简单的方法:
from operator import iadd
然后,重新定义lambda
传递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
whenmain
被调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句