1. Сначала определяется глобальная переменная x со значением "a":
x = "a"
2. Затем определяется функция outer_func(), которая объявляет x как глобальную переменную с помощью ключевого слова global:
def outer_func():
global x
3. Внутри outer_func() определяется вложенная функция nested_func(), которая просто выводит значение x:
def nested_func():
print(x)
4. После определения функций, значение глобальной переменной x изменяется на "b":
x = "b"
Благодаря объявлению global x внутри outer_func(), все обращения к x внутри этой функции (включая вложенные функции) будут ссылаться на глобальную переменную x. Когда nested_func() вызывается и пытается вывести x, она ищет значение x в следующем порядке (LEGB):
— L (Local): локальной переменной x нет;
— E (Enclosing): из-за global x в outer_func, пропускается;
— G (Global): находит x со значением "b";
— B (Built-in): не требуется.