1

初心者の質問のように思えるかもしれませんが(そうかもしれません)、なぜ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 ドキュメントで本当に重要なことを見逃していませんか?

4

1 に答える 1

6

クロージャーは、最終的に の値に基づいて構築さi4ます。

iラムダ内に保持したい場合は、デフォルト変数を使用できます。

>>>for i in xrange(5):
...    a.append(lambda x=i: x + 1)
于 2013-04-24T13:29:23.100 に答える