лямбда-функция не закрывает параметр в Python?

Код говорит больше:


from pprint import pprint

li = []

for i in range(5):
        li.append(lambda : pprint(i))

for k in li:
        k()

yield:

4
4
4
4
4

почему бы и нет

0
1
2
3
4

??

Спасибо.

P.S. Если я напишу полный декоратор, он будет работать так, как ожидалось:



from pprint import pprint

li = []

#for i in range(5):
        #li.append(lambda : pprint(i))

def closure(i):
        def _func():
                pprint(i)
        return _func

for i in range(5):
        li.append(closure(i))

for k in li:
        k()
9
задан Grissiom 22 September 2011 в 11:35
поделиться