670просмотров
7.9%от подписчиков
10 марта 2026 г.
Score: 737
Объяснение по шагам 1️⃣Цикл for i in range(3) запускается: i принимает значения 0, 1, 2 2️⃣На каждой итерации создаётся лямбда lambda: i — но она не запоминает текущее значение i, а сохраняет лишь ссылку на имя i 3️⃣Список funcs теперь содержит три функции, каждая смотрит на одно и то же имя i 4️⃣Цикл завершился — переменная i в области видимости равна 2 5️⃣f() вызывается для первой лямбды → ищет i → находит 2 → возвращает 2 6️⃣То же самое для второй и третьей лямбды 7️⃣print([2, 2, 2]) выводит [2, 2, 2] Почему это важно
Классическая ловушка при создании коллбэков в цикле. Чтобы зафиксировать значение в момент создания, используйте аргумент по умолчанию: lambda i=i: i — он вычисляется сразу при создании функции.