Как замыкание вычисляет результат res(2)

Выводится 7. Res ссылается на функцию add, которая сохраняет доступ к x=5 из make_adder; аргумент 2 становится локальным y.

Короткий ответ

Что ответить на собеседовании

Выводится 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, получится другое замыкание с независимым окружением.

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

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

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

Подробнее