@nishe

Почему я не могу сгенерировать разные по содержанию lambda функции?

У меня получается, что в списке L1 i доходит до 3 и генерируется 3 lambda x: x**3, почему так происходит, я думаю, что это нелогично.
L = [lambda x: x**0,
     lambda x: x**1,
     lambda x: x**2,
     lambda x: x**3]
print(L[2](3)) #выдает 9
L1 = [lambda x: x**i for i in [0,1,2,3]]
print(L1[2](3)) # выдает 27
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Потому что тело лямбы запоминает ссылку на переменную i, а не значение i. Соответственно, после цикла i имеет последнее значение, т.е. 3.
Можно попробовать обойти это так: lambda x, n=i: x**n
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 нояб. 2024, в 05:21
2000 руб./за проект
28 нояб. 2024, в 05:18
500 руб./за проект
28 нояб. 2024, в 03:51
3500 руб./за проект