В Python ключевое слово nonlocal используется внутри вложенных функций для указания, что переменная, к которой мы обращаемся, находится во внешней (но не глобальной) области видимости.
Опишите механику работы ключевого слова nonlocal в замыканиях Python. Чем оно отличается от global на уровне таблиц локальных и глобальных имён (scopes) во время выполнения байткода?
В Python ключевое слово nonlocal используется внутри вложенных функций для указания, что переменная, к которой мы обращаемся, находится во внешней (но не глобальной) области видимости.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В Python ключевое слово nonlocal используется внутри вложенных функций для указания, что переменная, к которой мы обращаемся, находится во внешней (но не глобальной) области видимости.
Обычно, если внутри вложенной функции присвоить значение переменной, Python считает её локальной. Чтобы изменить переменную из внешней функции, нужно объявить её как nonlocal.
Пример:
def outer():
count = 0
def inner():
nonlocal count
count += 1
print(count)
inner()
inner()
outer()
# Вывод:
# 1
# 2
Без nonlocal попытка изменить count внутри inner вызвала бы ошибку, так как Python бы считал count локальной переменной, а она не была инициализирована внутри inner.
Таким образом, nonlocal позволяет работать с переменными из внешних, но не глобальных областей видимости, что полезно для замыканий и вложенных функций.