лямбда в python

Рассмотрим этот пример

def dump(value): print value items = [] for i in range(0, 2): items.append(lambda: dump(i)) for item in items: item() 

вывод:

 1 1 

как я могу получить:

 0 1 

Вы можете использовать параметр со значением по умолчанию для лямбда:

 for i in range(0, 2): items.append(lambda i=i: dump(i)) 

Это работает, потому что значение по умолчанию оценивается, когда функция определена, а не когда она вызывается.

Вы можете использовать:

 for i in range(0, 2): items.append(lambda i=i: dump(i)) 

для захвата текущего значения i

Это работает, потому что значения параметров по умолчанию оцениваются во время создания функции, а i – не внешняя переменная, а параметр функции, который будет иметь значение, которое вы хотите по умолчанию.

Более подробное объяснение можно найти в этом ответе .

Для полноты вы также можете:

 for i in range(0, 2): items.append((lambda i: lambda: dump(i))(i)) 

Выходным значением является значение i при оценке функции, а не в ее объявлении. Вот почему вы не получаете желаемого результата.