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