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)
将所有这些添加在一起,同时还添加适当的returns 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 次 |
| 最近记录: |