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

时间:2013-12-12 06:18:18

标签: python lambda append

任何人都可以进行健全检查吗?

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

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

然后,

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

为什么会这样?

1 个答案:

答案 0 :(得分:4)

编辑:Stackoverflow here中已经讨论过几乎相同的问题。

这是因为python的closure属性。要获得你真正需要的东西,你需要这样做

f = lambda j, i = i : i

所以,这个程序的输出就像这样

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)

<强>输出

0
1
2
3
4