Как 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 использует для обработки своих странных границ?

Ответы на вопрос(2)

Ваш ответ на вопрос