如何修改 lambda 函数中的变量?
Posted
技术标签:
【中文标题】如何修改 lambda 函数中的变量?【英文标题】:How to modify a variable inside a lambda function? 【发布时间】:2017-04-23 12:36:11 【问题描述】:我正在尝试做这样的事情:
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
【问题讨论】:
为什么myFunc
没有return
声明?如果你期望y
改变aVariable
和/或bVariable
这不会发生,不管y
做什么,因为aVariable
和bVariable
都是字符串,而Python 字符串是不可变的。
对,我换个问题。
【参考方案1】:
在lambda
函数的主体中只允许使用expressions; a += b
是一个augmented assignment statement,编译时会导致一个SyntaxError
,因为语法不允许。
您可以将其更改为简单地返回添加:
lambda a,b: a+b
然后继续将调用它的结果适当地设置为a
:
a = y(aVariable,bVariable)
您当然可以使用用于该操作的函数。尽管您可以直接执行 lambda a, b: a.__iadd__(b)
,但这很笨拙,并且使用这样的 dunders 并不是最佳做法。相反,您应该使用operator
模块中的适当操作。
The iadd
function from operator
允许您在确实需要时绕过此“限制”。 函数调用是表达式,因此可以在 lambda 函数体中使用它们。需要一个简单的import
:
from operator import iadd
然后,重新定义传递给myFunc
的lambda
以使用iadd
:
myFunc(lambda a,b: iadd(a, b))
将这些加在一起,同时在myFunc
和main
中添加适当的return
s:
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
。
【讨论】:
以上是关于如何修改 lambda 函数中的变量?的主要内容,如果未能解决你的问题,请参考以下文章