Что выведет следующий код?
def create_funcs():
funcs = []
for i in range(3):
def f():
return i
funcs.append(f)
return funcs
for func in create_funcs():
print(func())
Варианты ответа:
A)
1
2
B)
2
2
C)
0
0
D) Ошибка выполнения
---
✅ Правильный ответ: B
Почему:
Это классическая late binding: функция
f() не сохраняет значение i на момент создания, а берёт его из текущей области видимости при вызове. К моменту вызова
i == 2 (последнее значение в range(3)), поэтому все три функции возвращают 2.Чтобы избежать этого — можно использовать аргументы по умолчанию:
def f(i=i): return i