如何在Lambda函数中修改变量?

emKaroly

我正在尝试做这样的事情:

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
迪米特里斯·法萨拉基斯·希利亚德

函数主体中允许使用表达式lambdaa += 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))

将所有这些加在一起,同时returnmyFunc和中添加适当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))

导致abwhenmain被调用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章