MiddleКодИногдаЕщё не отвечали
Что выведет этот список лямбд?
Предскажите, что выведет это включение.
funcs = [lambda: i for i in range(3)]
print([f() for f in funcs])
Определите вывод и объясните.
[2, 2, 2]. Замыкания захватывают переменную i, а не её значение в момент создания (позднее связывание). К моменту вызова лямбд цикл завершён и i == 2. Решение — связать на каждой итерации через аргумент по умолчанию: [lambda i=i: i for i in range(3)].
- ✗Считать, что замыкания захватывают значение, а не переменную
- ✗Ожидать
[0, 1, 2]из семантики «значение в момент создания» - ✗Не знать решение со связыванием через аргумент по умолчанию
- →Почему связывание через аргумент по умолчанию захватывает текущее значение
i? - →Чем это отличается между генераторным выражением и списковым включением?