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


def outer():
    x = 7
    def inner():
        nonlocal x
        x = 20
    inner()
    return x
print(outer())

Функция outer возвращает 20. nonlocal x в функции inner позволяет изменять переменную x в ближайшей внешней области видимости, не являющейся глобальной. Таким образом, inner изменяет x в outer, и outer возвращает измененное значение.

Код:


def outer():
  x = 7
  def inner():
    nonlocal x
    x = 20
  inner()
  return x
print(outer())
  

Объяснение:

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

Результат:

20
0