如何修改 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 做什么,因为aVariablebVariable 都是字符串,而Python 字符串是不可变的。 对,我换个问题。 【参考方案1】:

lambda 函数的主体中只允许使用expressionsa += 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

然后,重新定义传递给myFunclambda 以使用iadd

myFunc(lambda a,b: iadd(a, b))

将这些加在一起,同时在myFuncmain 中添加适当的returns:

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 函数中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新嵌套lambda函数中的变量(C ++)

编程语言中的Lambda 函数是如何产生的 它究竟有什么用

编程语言中的Lambda 函数是如何产生的 它究竟有什么用

如何确定AWS Lambda函数中的当前区域?

如何使用lambda表达式捕获局部变量?

从 Python Lambda 函数连接 Athena SQL 查询中的变量