В i3()
, когда вы объявляете global x
, он действительно использует самый внешний x
, но вы не изменили его значение.
В этой части кода:
i3()
print("outer:", x)
Команда print
находится вне метода i3()
, поэтому глобальный x
равен NOT используемый.Это будет локальный x
, который будет использоваться.Команда global
в i3()
означает, что только x
, используемый в i3()
, будет глобальным.Как только выйдет за пределы i3()
, объявленная область действия global
для x
будет завершена.
Таким образом, print("outer:", x)
печатает 3, что является значением локальной переменной метода outer()
.Самый внешний x
остается 0 на всем протяжении.