[python] lambda и partial
От: Буравчик Россия  
Дата: 16.12.10 08:07
Оценка:
Помогите разобраться.

Есть код:
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>>
Best regards, Буравчик
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.