См. введите описание ссылки здесь ссылка для получения информации о non-local
.
Нелокальный оператор заставляет перечисленные идентификаторы ссылаться на ранее связанные переменные в ближайшей охватывающей области, исключая Глобал. Это важно, потому что поведение привязки по умолчанию заключается в том, чтобы сначала выполнить поиск в локальном пространстве имен. Оператор позволяет инкапсулированному коду связывать переменные вне локальной области, кроме глобальной (модульной) области.
Короче говоря, он позволяет назначать значения переменной во внешнем (но не -global) scope.
Если вы удалите ключевое слово nonlocal
и попробуете свою программу, вы увидите:
inner: nonlocal
outer: local
Программа:
def outer():
x = 'local'
def inner():
x='nonlocal'
print('inner:', x)
inner()
print('outer:', x)
outer()