Глобальные переменные всегда доступны для всех локальных областей в Python, включая функции. В этом случае в пределах main()
A
, B
и C
все находятся в области действия.
Ключевое слово global
не делает то, что, как вы думаете, делает; скорее, он позволяет локальной области видимости манипулировать глобальной функцией (это делает, так сказать, глобальные переменные «доступными для записи»). Рассмотрим эти примеры:
c = 4
print c
def foo():
c = 3
print c
foo()
print c
Здесь вывод будет
4
3
4
Теперь рассмотрим это:
c = 4
print c
def foo():
global c
c = 3
print c
foo()
print c
В этом случае вывод будет
4
3
3
В первом случае c = 3
просто затеняет c
до тех пор, пока его область не будет увеличена (т.е. когда определение функции закончится). Во втором случае мы фактически ссылаемся на глобальную c
после того, как напишем global c
, поэтому изменение значения c
приведет к постоянному изменению.