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


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 - к переменным в окружающей (не глобальной) области видимости.
0