Создание функций (или лямбда-выражений) в цикле (или понимании)Python

Программы на Python
Ответить
Anonymous
 Создание функций (или лямбда-выражений) в цикле (или понимании)

Сообщение Anonymous »

Я пытаюсь создать функции внутри цикла:

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

functions = []

for i in range(3):
def f():
return i
functions.append(f)
Альтернативный вариант с лямбдой:

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

functions = []

for i in range(3):
functions.append(lambda: i)
Проблема в том, что все функции оказываются одинаковыми. Вместо возврата 0, 1 и 2 все три функции возвращают 2:

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

print([f() for f in functions])
  • Ожидаемый результат: [0, 1, 2]
  • Фактический результат: [2, 2, 2]
Почему это происходит и что мне следует сделать, чтобы получить три разные функции, выводящие 0, 1 и 2 соответственно?


Подробнее здесь: https://stackoverflow.com/questions/343 ... prehension
Ответить

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

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

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

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

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