【问题标题】:Problems with lambda in Python [duplicate]Python中的lambda问题[重复]
【发布时间】:2021-01-23 09:40:29
【问题描述】:

我在这里有一个名为return_funcs 的简单函数:

>>> def return_funcs():
...     functions = []
...     for i in range(4):
...             functions.append(lambda: i)
...     return functions

当我使用 return_funcs 这就是我得到的:

>>> for func in return_funcs():
...     func()
...
3
3
3

我期待的是这样的:

1
2
3

为什么我会得到这个意外的输出,我该如何解决?

【问题讨论】:

    标签: python python-3.x lambda


    【解决方案1】:

    Python 是一种惰性语言,因此在打印之前不会计算 lambda 中的 i。此时循环结束,我保留了最后一个值3

    要获得您想要的输出,请使用lambda i=i: i。这将为每个 lambda 创建一个本地变量 i 并将当前 i 值分配给它。

    【讨论】:

    • Lazy evaluation 有一个非常具体的含义,而 Python 没有,所以我不会称 Python 为 lazy 语言。
    • 更详细的解释:当lambda:i+5被调用时,i作为lambda外的变量被查找,并且在调用时time value 是最终值 3. 定义 lambda x=i: x+5 时,设置 x 的默认值,所以 i 查找定义的时间。
    猜你喜欢
    • 2020-10-15
    • 2013-02-02
    • 2022-01-16
    • 2019-12-14
    • 2013-05-05
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多