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?