可能看起来像一个小问题(myabe),但为什么python表现得那样:
>>>a = []
>>>for i in xrange(5):
... a.append(lambda: i + 1)
>>>a[0]()
5
>>>a[1]()
5
>>>a[2]()
5
>>>a[3]()
5
>>>a[4]()
5
当存在不同的函数时:
>>aaa
[<function <lambda> at 0x100499d70>, <function <lambda> at 0x100499e60>, <function <lambda> at 0x100499ed8>, <function <lambda> at 0x100499de8>, <function <lambda> at 0x10049f050>]
或者我错过了python docs中非常重要的东西?
答案 0 :(得分:6)
闭包建立在i
的值上,最终为4
。
如果你想将i
保留在lambda中,你可以使用默认变量。
>>>for i in xrange(5):
... a.append(lambda x=i: x + 1)