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