Как Python обрабатывает глобалы?
Я сталкивался с очень странной обработкой глобальных переменных в Python. Я надеялся, что кто-то сможет объяснить и оправдать эти сюрпризы!
A) Этот код печатает 10, как и ожидалось:
def func():
print(a)
a = 10
func()
Б) Этот код вызывает исключение из-за слишком ранней ссылки:
def func():
print(a)
a += 1
a = 10
func()
C) Но этот код печатает [10], как и ожидалось:
def func():
print(a)
a.append(1)
a = [10]
func()
Таким образом, я могу понять, что типa
изменяет свою сферу и, кроме того, более поздние заявления, которые еще не были достигнуты, изменяют способa
виден. Я знаю, что могу использоватьglobal a
в начале функции, но она довольно многословна.
Может кто-нибудь сказать мне, какие правила Python использует для обработки своих странных границ?