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