Jak Python obsługuje globały?

Natknąłem się na bardzo dziwną obsługę zmiennych globalnych w Pythonie. Miałem nadzieję, że ktoś może wyjaśnić i uzasadnić te niespodzianki!

A) Ten kod drukuje 10 zgodnie z oczekiwaniami:

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

B) Ten kod zgłasza wyjątek dotyczący odwoływania się zbyt wcześnie:

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

C) Ale ten kod drukuje [10] zgodnie z oczekiwaniami:

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

Więc mogę zebrać ten typa zmienia swój zakres i dodatkowo późniejsze oświadczenia, które jeszcze nie zostały osiągnięte, zmieniają sposóba jest widziany. Wiem, że mogę użyćglobal a na początku funkcji, ale jest to dość szczegółowe.

Czy ktoś może mi powiedzieć, jakich zasad używa Python do radzenia sobie z dziwacznym zakresem?

questionAnswers(2)

yourAnswerToTheQuestion