Po przypisaniu zmiennej (x = ...
), tworzysz zmienną w bieżącym zakresie (na przykład lokalny do bieżącej funkcji). Jeśli dzieje się z cieniem zmienną przed zewnętrznym (np. Globalnym) zasięgiem, to o wiele za dobrze - Python nie dba o to (i to dobrze). Więc nie można tego zrobić:
x = 0
def f():
x = 1
f()
print x #=>0
i oczekują 1
. Zamiast tego trzeba deklaruje, że zamierza korzystać z global x
:
x = 0
def f():
global x
x = 1
f()
print x #=>1
Należy jednak pamiętać, że przypisanie zmiennej jest bardzo różni się od wywołań metod. Zawsze możesz wywoływać metody w dowolnych zakresach - np. na zmiennych, które pochodzą z zewnętrznego (np. globalnego) zakresu, ponieważ nic lokalnego nie powoduje ich cieniowania.
także bardzo ważne: przypisanie państw (x.name = ...
), przypisanie pozycji (collection[key] = ...
), cesja slice (sliceable[start:end] = ...
) i propably bardziej są metoda nazywa, jak dobrze! I dlatego nie potrzebujesz global
, aby zmienić członków globalnych lub nazwać ich metodami (nawet gdy mutują obiekt).
oczywiście, że wiem, że zmienne globalne są eeeevil? Jeśli to możliwe, nie pisz funkcji zależnej od niczego innego niż argumenty. I nigdy, chyba że w bardzo rzadkich okolicznościach, modyfikować coś globalnego z więcej niż jednego punktu. To prawie nigdy nie jest konieczne i jest skłonne do późniejszego dodawania ogromnych bólów głowy. Podsumowując, nie warto. – delnan