Создать список из трёх функций, где каждая функция при вызове возвращает своё число.

В исходном коде все функции читают одну переменную 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]

Значение параметра вычисляется при создании каждой функции. Альтернатива — фабрика, создающая отдельное замыкание для переданного числа. Здесь числа неизменяемые, поэтому такой захват безопасен; для изменяемых объектов параметр сохраняет ссылку, а не независимую копию.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее