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


def test():
    x = 10
    def inner():
        nonlocal x
        x = 20
    inner()
    return x

print(test())

Код выведет 20. Ключевое слово nonlocal позволяет функции inner изменить значение переменной x, объявленной в окружающей (но не глобальной) области видимости (в данном случае, в функции test). Таким образом, когда inner присваивает x значение 20, это изменение отражается и на переменной x в функции test.

Вопрос: Какой результат выведет данный код?


def test():
    x = 10
    def inner():
        nonlocal x
        x = 20
    inner()
    return x
print(test())
  

Ответ: 20

Разъяснение:

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

Таким образом, использование nonlocal позволяет вложенной функции изменять переменную, определенную в окружающей её функции.

0