Понимание уровней видимости переменных в вложенных функциях

Будет выведено 10. g_val — глобальная переменная, outer_val принадлежит outer_function, inner_val локальна для inner_function.

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

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

Будет выведено 10. g_val — глобальная переменная, outer_val принадлежит outer_function, inner_val локальна для inner_function.

Подробный разбор

Ответ с пояснениями

Условие

Разберите, что происходит в следующем коде: как различаются переменные g_val, outer_val и inner_val в глобальном, внешнем и внутреннем контексте функции, и какое значение будет выведено.

g_val = 1

def outer_function():
    outer_val = 10

    def inner_function():
        inner_val = 20
        return

    inner_function()
    print(outer_val)
    return

outer_function()

Ответ

Будет выведено 10. g_val — глобальная переменная, outer_val принадлежит outer_function, inner_val локальна для inner_function.

Внутренняя функция присваивает inner_val=20, но не изменяет outer_val и не использует g_val. Её return без выражения возвращает None, после чего внешняя функция продолжает работу и печатает 10.

Чтение имени в Python обычно идёт по правилу LEGB: локальная область, внешние функции, модуль, встроенные имена. Для изменения переменной внешней функции используется nonlocal, для переменной модуля — global. После завершения inner_function обратиться к её локальному имени из outer_function напрямую нельзя. Наличие вложенной функции само по себе не объединяет локальные области видимости.

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

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

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

Подробнее