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

Python: Append lambda functions to list

本问题已经有最佳答案,请猛点这里访问。

有人能做健康检查吗?

我正在尝试使函数进入for循环。我无法理解的要点概括为以下代码:

1
2
3
4
f_list = []
for i in range(10):
    f = lambda j : i
    f_list.append(f)

然后,

1
2
3
4
>>> f_list[0](0)
9                  #I hope this is 0.
>>> f_list[1](0)
9                  #I hope this is 1.

为什么会这样??


编辑:StackOverflow中已经讨论了几乎相同的问题。

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

1
f = lambda j, i = i : i

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

1
2
3
4
5
6
7
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)

产量

1
2
3
4
5
0
1
2
3
4