Почему все лямбды 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?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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