def outer():
x = "outer"
def inner():
nonlocal x
x = "inner"
inner()
return x
print(outer())
outer
определяет переменную x
с начальным значением "outer". Внутри outer
определяется функция inner
. inner
использует ключевое слово nonlocal
для изменения переменной x
, объявленной во внешней области видимости (в outer
). После вызова inner()
значение x
в outer
становится "inner". Затем outer
возвращает текущее значение x
. Таким образом, функция print
выведет "inner".
Разберем код построчно, чтобы понять, что будет выведено в консоль.
1. def outer():
: Определяется внешняя функция outer
.
2. x = "outer"
: Внутри outer
, переменной x
присваивается значение "outer". x
находится в области видимости функции outer
.
3. def inner():
: Определяется внутренняя функция inner
.
4. nonlocal x
: Ключевое слово nonlocal
указывает, что переменная x
, к которой обращаются в функции inner
, не является локальной для inner
. Вместо этого, она относится к ближайшей внешней области видимости, в которой определена переменная с таким же именем. В данном случае, это переменная x
, определенная в функции outer
.
5. x = "inner"
: Переменной x
(которая, как мы определили с помощью nonlocal
, относится к переменной во внешней функции outer
) присваивается значение "inner". Это *изменяет* значение переменной x
в области видимости функции outer
.
6. inner()
: Вызывается функция inner
. К моменту вызова функции inner
, в ней изменяется значение переменной x, объявленной во внешней функции outer.
7. return x
: Функция outer
возвращает значение переменной x
. Поскольку функция inner
изменила значение x
на "inner", функция outer
возвращает "inner".
8. print(outer())
: Вызывается функция outer
, возвращаемое значение которой ("inner") выводится в консоль.
Таким образом, результатом выполнения кода будет вывод:
inner