emK*_*oly 3 python lambda python-3.x
我想做这样的事情:
def myFunc(y):
aVariable = "a"
bVariable = "b"
y(aVariable,bVariable)
def main():
myFunc(lambda a,b: a+=b)
Run Code Online (Sandbox Code Playgroud)
并期望输出"ab"
.
相反,我收到以下错误:
File "<stdin>", line 7
myFunc(lambda x, y: x += y)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
函数体中只允许表达式lambda
; a += b
是一个扩充的赋值语句,在编译时,这将导致a SyntaxError
语法不允许它.
您可以将其更改为仅返回添加:
lambda a,b: a+b
Run Code Online (Sandbox Code Playgroud)
然后继续设置调用它的结果a
:
a = y(aVariable,bVariable)
Run Code Online (Sandbox Code Playgroud)
您当然可以使用用于该操作的函数.虽然你可以直接做lambda a, b: a.__iadd__(b)
,但这是笨重的,使用这样的dunders不是最好的做法.相反,您应该使用operator
模块中的相应操作.
在iadd
从功能operator
允许你绕过这个"限购"如果你真的需要.函数调用是表达式,因此,允许它们在lambda函数的主体中使用它们.import
需要简单:
from operator import iadd
Run Code Online (Sandbox Code Playgroud)
然后,重新定义lambda
传递myFunc
给使用iadd
:
myFunc(lambda a,b: iadd(a, b))
Run Code Online (Sandbox Code Playgroud)
将所有这些添加在一起,同时还添加适当的return
s 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))
Run Code Online (Sandbox Code Playgroud)
调用ab
时的结果main
.
归档时间: |
|
查看次数: |
121 次 |
最近记录: |