[Python] Indagine su una variabile.

Gabriele Battaglia iz4apu a libero.it
Lun 19 Set 2022 13:11:37 CEST


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 a lists.python.it
> https://lists.python.it/mailman/listinfo/python

-- 
--... ...--  -.. .  .. --.. ....- .- .--. ..-  - ..-  . .
Sent from TB on Windows 10, Genus Bononiae's computer.



Maggiori informazioni sulla lista Python