Что выведет этот код?


def outer():
    x = 5
    def inner():
        nonlocal x
        x = 10
    inner()
    return x

print(outer())

Функция outer определяет переменную x равную 5. Функция inner использует nonlocal x, что позволяет ей изменять переменную x, объявленную в окружающей области видимости (в функции outer). inner устанавливает x в 10. outer возвращает значение x, которое после вызова inner равно 10. Следовательно, программа выведет 10.

Код:


def outer():
    x = 5
    def inner():
        nonlocal x
        x = 10
    inner()
    return x
print(outer())
  

Объяснение:

  1. Функция outer() инициализирует локальную переменную x значением 5.
  2. Внутри outer() определена вложенная функция inner().
  3. inner() использует ключевое слово nonlocal x. Это указывает на то, что x, используемая внутри inner(), ссылается на переменную x, определенную в ближайшей внешней (неглобальной) области видимости, то есть в области видимости функции outer().
  4. Внутри inner() переменной x присваивается значение 10. Поскольку x является nonlocal, это изменение затрагивает переменную x в outer().
  5. Затем inner() вызывается.
  6. После вызова inner(), функция outer() возвращает значение переменной x. Поскольку inner() изменила значение x, возвращается значение 10.
  7. Наконец, print(outer()) выводит возвращаемое значение, то есть 10.

Вывод:

10
0