x = 2
def outer():
    def inner():
        nonlocal x
        x = 3
    inner()
    return x
print(outer())
x = 2: Глобальная переменная x инициализируется значением 2.outer(): Вызывается внешняя функция.inner(): Внутри outer() вызывается вложенная функция inner().nonlocal x: Объявление в inner() указывает, что x относится к переменной из ближайшей неглобальной области видимости, то есть к переменной x в outer().x = 3:  В inner() переменная x (из области видимости outer()) изменяется на 3.return x: outer() возвращает значение x, которое равно 3.print(outer()): Выводится возвращенное значение, то есть 3.Данный код иллюстрирует использование ключевого слова nonlocal в Python.
Порядок выполнения:
x = 2: Переменная x инициализируется значением 2 в глобальной области видимости.outer(): Вызывается функция outer.outer():
      inner() определена.inner().inner():
          nonlocal x: Указывает, что переменная x, используемая внутри inner(), находится в ближайшей внешней (не глобальной) области видимости. В данном случае, это область видимости функции outer().x = 3: Переменной x в области видимости outer() присваивается значение 3.  Важно!  Эта операция не затрагивает глобальную переменную x.inner() завершается.return x: Функция outer() возвращает значение переменной x, которое теперь равно 3 (так как оно было изменено в inner()).print(outer()): Выводит возвращаемое значение outer(), которое равно 3.Ключевые моменты:
nonlocal: Позволяет внутренней функции изменять переменную, объявленную в ближайшей внешней (не глобальной) области видимости.nonlocal, попытка присвоить значение x в inner() создала бы локальную переменную x внутри inner(), не затрагивая x в outer().x не была определена во внешней области видимости функции inner (т.е. если бы не было строчки `x = 2` и `x = 3` в `outer`), то возникла бы ошибка NameError.Вывод:
Программа выведет число 3.