[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