2024-04-20 12:50:57 发布
网友
我试着这样做:
def myFunc(y): aVariable = "a" bVariable = "b" y(aVariable,bVariable) def main(): myFunc(lambda a,b: a+=b)
并期望输出为"ab"。你知道吗
"ab"
相反,我得到以下错误:
File "<stdin>", line 7 myFunc(lambda x, y: x += y) ^ SyntaxError: invalid syntax
在lambda函数体中只允许expressions;a += b是augmented assignment statement,编译时,这将导致SyntaxError,因为语法不允许它。你知道吗
lambda
a += b
SyntaxError
您可以将其更改为只返回加法:
lambda a,b: a+b
然后继续将调用结果适当地设置为a:
a
a = y(aVariable,bVariable)
当然,您可以使用用于该操作的函数。虽然你可以直接做lambda a, b: a.__iadd__(b),但这是笨拙的,像这样使用扣篮不是最好的做法。相反,您应该使用来自operator模块的适当操作。你知道吗
lambda a, b: a.__iadd__(b)
operator
The ^{} function from ^{}允许您在确实需要时绕过此“限制”。函数调用是表达式,因此允许在lambda函数体中使用它们。需要一个简单的import:
import
from operator import iadd
然后,重新定义传递给myFunc的lambda以使用iadd:
myFunc
iadd
myFunc(lambda a,b: iadd(a, b))
将所有这些加在一起,同时在myFunc和main中添加适当的return:
main
return
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。你知道吗
ab
在
lambda
函数体中只允许expressions;a += b
是augmented assignment statement,编译时,这将导致SyntaxError
,因为语法不允许它。你知道吗您可以将其更改为只返回加法:
然后继续将调用结果适当地设置为
a
:当然,您可以使用用于该操作的函数。虽然你可以直接做
lambda a, b: a.__iadd__(b)
,但这是笨拙的,像这样使用扣篮不是最好的做法。相反,您应该使用来自operator
模块的适当操作。你知道吗The ^{} function from ^{} 允许您在确实需要时绕过此“限制”。函数调用是表达式,因此允许在lambda函数体中使用它们。需要一个简单的
import
:然后,重新定义传递给
myFunc
的lambda
以使用iadd
:将所有这些加在一起,同时在
myFunc
和main
中添加适当的return
:当调用
main
时,结果是ab
。你知道吗相关问题 更多 >
编程相关推荐