Python:将 lambda 函数附加到列表中

ywa*_*wat 6 python lambda append

任何人都可以做健全性检查吗?

我正在尝试在 for 循环中创建函数。我无法理解的一点总结在以下代码中:

f_list = []
for i in range(10):
    f = lambda j : i
    f_list.append(f)
Run Code Online (Sandbox Code Playgroud)

然后,

>>> f_list[0](0)
9                  #I hope this is 0.
>>> f_list[1](0)
9                  #I hope this is 1.
Run Code Online (Sandbox Code Playgroud)

为什么会这样??

the*_*eye 10

编辑:几乎相同的问题已经在 Stackoverflow 中讨论过,这里

这是因为python的闭包属性。为了得到你真正需要的东西,你需要这样做

f = lambda j, i = i : i
Run Code Online (Sandbox Code Playgroud)

所以,这个程序的输出变成了这样

f_list = []
for i in range(5):
    f = lambda j, i = i : i
    f_list.append(f)

for i in range(5):    
    print f_list[i](0)
Run Code Online (Sandbox Code Playgroud)

输出

0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)