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 |