Quando si assegna una variabile (x = ...
), si crea una variabile nell'ambito corrente (ad esempio locale alla funzione corrente). Se capita di ombreggiare una variabile da un ambito esterno (ad esempio globale), troppo male - a Python non importa (e questa è una buona cosa). Quindi non puoi fare questo:
x = 0
def f():
x = 1
f()
print x #=>0
e aspettare 1
. Invece, è necessario fare dichiarare che si intende utilizzare il global x
:
x = 0
def f():
global x
x = 1
f()
print x #=>1
Ma nota che l'assegnazione di una variabile è molto diverso da chiamate di metodo. Puoi sempre chiamare i metodi su qualsiasi cosa nell'ambito - ad es. su variabili che provengono da un ambito esterno (ad esempio globale) perché nulla di locale le ombreggia.
anche molto importante: l'assegnazione Stati (x.name = ...
), assegnazione item (collection[key] = ...
), assegnamento di una fetta (sliceable[start:end] = ...
) e riordinata più sono tutti metodo di chiamate, come pure! E quindi non hai bisogno di global
per cambiare i membri di un globale o chiamarlo metodi (anche quando mutano l'oggetto).
Naturalmente non sapere che le variabili globali sono eeeevil? Quando possibile, non scrivere funzioni che dipendono da qualcosa di diverso dagli argomenti. E mai, a meno che in circostanze molto rare, modifichi qualcosa di globale da più di un punto. Non è quasi mai necessario ed è incline ad aggiungere enormi mal di testa in seguito. In conclusione, non ne vale la pena. – delnan