x = 1
def outer():
    global x
    def inner():
        global x
        x = 2
    inner()
    return x
print(outer())
x объявлена глобальной.outer также использует глобальную переменную x.inner, вложенная в outer, также использует глобальную переменную x и изменяет её значение на 2.outer возвращает значение глобальной переменной x, которое после вызова inner() стало равным 2.Разбор кода:
x инициализируется значением 1.outer() определена. Внутри нее также используется ключевое слово global x, что означает, что функция работает с глобальной переменной x.outer() определена функция inner(), которая также использует global x, указывая на использование глобальной переменной.inner() присваивает глобальной переменной x значение 2.outer() вызывает inner().outer() возвращает текущее значение глобальной переменной x.print(outer()) выводит значение, возвращенное функцией outer().Порядок выполнения:
x = 1: Глобальная переменная x становится равной 1.outer() вызывается.outer(), inner() вызывается.inner(), x = 2: Глобальная переменная x становится равной 2.inner() завершается.outer() возвращает текущее значение глобальной переменной x, которое равно 2.print(outer()) выводит 2.Результат:
Код выведет 2.
Объяснение ключевых моментов:
global x внутри обеих функций outer() и inner() указывает, что они обе работают с одной и той же глобальной переменной x.x внутри inner() влияет на значение x, которое возвращает outer(), поскольку это одна и та же глобальная переменная.