Помогите разобраться.
Есть код:
fs = []
def go(n):
print n
for n in range(3):
fs.append( lambda: go(n) )
for f in fs:
f()
Ожидается, что он должен вывести 0 1 2. На самом деле выводит 2 2 2.
Я предполагаю, что при формировании лямбды питон запомнил не значение переменной, а ссылку на нее.
Из-за этого все и происходит.
В то же время аналогичный код с функцией partial работает правильно:
from functools import partial
fs = []
def go(n):
print n
for n in range(3):
fs.append( partial(go, n) )
for f in fs:
f()
Вопрос:
1. Почему partial работает, lambda нет
2. Как исправить код 1, чтобы он заработал (не используя partial)
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>