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

Rispondere a