Выводится 7. Res ссылается на функцию add, которая сохраняет доступ к x=5 из make_adder; аргумент 2 становится локальным y.
Как замыкание вычисляет результат res(2)
Выводится 7. Res ссылается на функцию add, которая сохраняет доступ к x=5 из make_adder; аргумент 2 становится локальным y.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В Python:
def make_adder(x):
def add(y):
return x + y
return add
res = make_adder(5)
print(res(2))
Откуда берутся значения и что выводится?
Ответ
Выводится 7. Res ссылается на функцию add, которая сохраняет доступ к x=5 из make_adder; аргумент 2 становится локальным y.
Вызов make_adder не складывает числа сразу, а возвращает функцию. При res(2) создаётся новый вызов add с y=2 и читается сохранённый x. Если вызвать make_adder ещё раз с другим x, получится другое замыкание с независимым окружением.