任何人都可以进行健全检查吗?
我正在尝试在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.
为什么会这样?
答案 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