Почему все лямбды Python внутри цикла используют последнее значение переменной цикла? [дубликат]Python

Программы на Python
Anonymous
Почему все лямбды Python внутри цикла используют последнее значение переменной цикла? [дубликат]

Сообщение Anonymous »

Я пытаюсь создать список функций динамически. Каждая функция должна умножать число на другое значение.
Вот мой код:

Код: Выделить всё

funcs = []

for i in range(5):
funcs.append(lambda x: x * i)

for f in funcs:
print(f(10))
Я ожидал, что результат будет следующим:

Код: Выделить всё

0
10
20
30
40
Но фактический результат:

Код: Выделить всё

40
40
40
40
40
Я понимаю, что лямбда x: x * i создает функцию, и я думал, что каждая функция будет помнить значение i на момент ее создания.
Однако кажется, что все функции используют окончательное значение i после завершения цикла.
Почему это происходит в Python? Связано ли это с замыканиями или поздним связыванием? Как правильно создать эти функции, чтобы каждая из них сохраняла свое значение i?

Вернуться в «Python»