Будет выведено 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 напрямую нельзя. Наличие вложенной функции само по себе не объединяет локальные области видимости.