7

Pythonインタープリターで次のコードを試しました:

>>> def say(n):
...   print n
... 
>>> say(12)
12
>>> test = []
>>> for each in range(30):
...   test.append(lambda: say(each))
... 
>>> test[0]()
29
>>> test[13]()
29

最後の 2 回の呼び出しで 0 と 13 が返されるべきではありません。テスト自体を直接見てみましたが、その中のすべての機能が異なっているようです

>>> test[0] == test[1]
False
>>> test[0]
<function <lambda> at 0x203e140>
>>> test[1]
<function <lambda> at 0x203e1b8>

なぜ彼らはすべて同じように振る舞っているのか分かりますか?

4

0 に答える 0