Grazie Massimo.
Siccome è passato molto tempo da che mi scrivesti questa risposta, la
riporto qui sotto per intero.
Da parte mia, e di tutti i principianti come me, ti ringrazio per la
chiarezza su questa caratteristica di Python e, immagino, di tutti i
linguaggi di programmazione che risulta un po ostica agli inizi.
Buona giornata.
Gabry.
Reply to Massimo Masson's message, wrote on 25/07/2022 at 20:35:
Il 25/07/2022 15:20, Gabriele Battaglia ha scritto:
[...]
Riprendendo il tuo esempio ti chiedo, a cosa serve allora la parola
chiave global?
Se io dichiaro una variabile a livello main, poi la modifico
all'interno di una funzione di livello più alto e naturalmente me la
aspetto modificata quando esco da queste funzioni, perchè dovrei
avere la necessità di dichiarare che quella variabile è global,
all'interno delle mie funzioni?
Non so se sono riuscito a spiegare il mio dubbio.
Provo a dirti la mia, vediamo se siamo sulla stessa lunghezza d'onda...
global serve per consentire di utilizzare una variabile fuori dal suo
scope (contesto) naturale.
Per quel che so lo si usa o all'interno di una funzione, o per
definire variabili "globali" tra moduli per scambio informazioni.
Sto sull'uso all'interno di una funzione, penso sia più facile per me
da spiegare.
Quando entri in una funzione, questa definisce il suo "scope". Le
variabili definite nella funzione hanno come scope la funzione
medesima. Quando esci dalla funzione, spariscono.
Se vuoi modificare una variabile definita fuori dalla funzione, allora
usi la keyword global, così la funzione capisce che lo scope è esterno
a se' stessa, e si vuole usare la variabile "esterna" e non quella
della funzione.
Nota che se ad una variabile assegni un valore nel corpo della
funzione python assume sia locale (a meno che non la dichiari global).
Le variabili solo referenziate all'interno di una funzione invece sono
implicitamente global.
Un esempio aiuta:
m = 1
def duplica():
global m
m = m * 2
print(m)
duplica()
Ti restituisce il valore 2.
Se provi a togliere la riga "global m" ottieni... un errore:
local variable 'm' referenced before assignment.
Questo perché hai usato la variabile prima di "dichiararla".
Nota che se sostiuissi "global m" con "m = 7" (ad esempio) non avresti
più l'errore, la stampa di "m dentro duplica" darebbe 14, la stampa di
"m fuori duplica" darebbe... ancora 1 (la "m" esterna alla funzione).
Ovvero, la variabile definita dentro la funzione "oscura" la variabile
esterna alla funzione, a meno che non la dichiari global, ed in tal
caso anche dentro la funzione utilizzi la variabile esterna (appunto,
globale).
Aiuta?
Ciao,
m.
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python
--
--... ...-- -.. . .. --.. ....- .- .--. ..- - ..- . .
Sent from TB on Windows 10, Genus Bononiae's computer.
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python