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)
| 归档时间: |
|
| 查看次数: |
8445 次 |
| 最近记录: |