@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
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
Потому что тело лямбы запоминает ссылку на переменную i, а не значение i. Соответственно, после цикла i имеет последнее значение, т.е. 3.
Можно попробовать обойти это так: lambda x, n=i: x**n
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы