Wie geht Python mit Globalen um?

Ich habe in Python einen sehr merkwürdigen Umgang mit globalen Variablen erlebt. Ich hatte gehofft, dass jemand diese Überraschungen erklären und rechtfertigen kann!

A) Dieser Code gibt erwartungsgemäß 10 aus:

def func():
  print(a)
a = 10
func()

B) Dieser Code löst eine Ausnahme zum Verweisen auf einen zu frühen Code aus:

def func():
  print(a)
  a += 1
a = 10
func()

C) Dieser Code gibt jedoch wie erwartet [10] aus:

def func():
  print(a)
  a.append(1)
a = [10]
func()

So kann ich das der Art nach erfassena ändert seinen Geltungsbereich und zusätzlich spätere Aussagen, die noch nicht einmal erreicht wurden, ändern wiea Wurde gesehen. Ich weiß, dass ich verwenden kannglobal a zu Beginn der Funktion ist es aber eher wortreich.

Kann mir jemand sagen, nach welchen Regeln Python mit seinem bizarren Scoping umgeht?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage