def outer():
x = 5
def inner():
nonlocal x
x = 10
inner()
return x
print(outer())
outer
возвращает 10
. Объявление nonlocal x
в функции inner
позволяет изменить переменную x
, объявленную во внешней функции outer
. Поэтому после вызова inner()
, значение x
в outer
становится равным 10
.
Этот код демонстрирует использование ключевого слова nonlocal
в Python.
Объяснение:
outer()
определяет локальную переменную x
, инициализированную значением 5.outer()
определяется вложенная функция inner()
.nonlocal x
в inner()
указывает, что переменная x
, к которой происходит обращение, находится в ближайшей внешней области видимости, но не в глобальной области видимости. В данном случае, это переменная x
, определенная в функции outer()
.inner()
изменяет значение x
на 10. Поскольку x
объявлена как nonlocal
, изменение происходит в области видимости outer()
.outer()
вызывает inner()
.outer()
возвращает значение x
. Так как inner()
изменила x
, то возвращается значение 10.print()
выводит возвращенное значение.Результат:
Код выведет в консоль: 10
Важные моменты:
nonlocal x
, то в inner()
была бы создана новая локальная переменная x
. Изменение этой локальной переменной не повлияло бы на x
в outer()
, и outer()
вернула бы 5.global
используется для доступа к глобальным переменным, а nonlocal
- к переменным в окружающей (не глобальной) области видимости.