python - 在python中使用lambda表达式在循环内生成函数

标签 python lambda scope

如果我列出两个函数列表:

def makeFun(i):
    return lambda: i

a = [makeFun(i) for i in range(10)]
b = [lambda: i for i in range(10)]

为什么列表 ab 不以保存方式运行?

例如:

>>> a[2]()
2
>>> b[2]()
9

最佳答案

正如其他人所说,范围界定是问题所在。请注意,您可以通过向 lambda 表达式添加额外参数并为其分配默认值来解决此问题:

>> def makeFun(i): return lambda: i
... 
>>> a = [makeFun(i) for i in range(10)]
>>> b = [lambda: i for i in range(10)]
>>> c = [lambda i=i: i for i in range(10)]  # <-- Observe the use of i=i
>>> a[2](), b[2](), c[2]()
(2, 9, 2)

结果是 i 现在被显式放置在限制为 lambda 表达式的范围内。

关于python - 在python中使用lambda表达式在循环内生成函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1841268/

相关文章:

python - 将 Twitter XML 日期转换为 Python 日期对象

ruby - Ruby 读取 "do"和 "end"的方式与读取 "{"和 "}"的方式相同吗?

c# - 分配给事件的 lambda 是否会阻止所属对象的垃圾回收?

optimization - F# 中是否所有 lambda 参数都自动内联

python - 当你有一个名为 max 的变量时使用 Python 的 max 函数?

javascript - Javascript 变量作用域问题

python - 关于python和类的问题

python - 映射在Elasticsearch中到底做了什么?

使用 xsd 文件的 python xml 验证

java - Java项目错误: cannot find symbol