如果我列出两个函数列表:
def makeFun(i):
return lambda: i
a = [makeFun(i) for i in range(10)]
b = [lambda: i for i in range(10)]
为什么列表 a
和 b
不以保存方式运行?
例如:
>>> 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/