[Python] Indagine su una variabile.

Massimo Masson max a studiomasson.it
Gio 5 Maggio 2022 18:57:05 CEST


Il 05/05/2022 16:16, Gabriele Battaglia ha scritto:
[...]

> Ho una variabile dichiarata ad inizio script, del tipo: d={}
> 
> 
> poi una routine la modifica, ovviamente ha lo stesso nome all'interno 
> della funzione che non riceve () e non restituisce nulla con return.
> 
> All'uscita da questa funzione tuttavia, mi ritrovo d intatta, come se 
> non avessi apportato alcuna modifica.

Secondo me è un tema di namespace e scope delle variabili...

Se dichiari una variabile dentro una funzione, il suo scope è interno 
alla funzione. La variabile dichiarata esternamente ha uno scope più ampio.

Quindi la "d" interna alla funzione esaurisce la sua visibilità in 
uscita della stessa.

La "d" esterna alla funzione continua a puntare al dizionario di prima.
Se non è stato modificato, il dizionario resta invariato.
Se invece modifichi il dizionario, anche dentro la funzione, lo ritrovi 
modificato (perché un conto è lo scope della variabile, un conto è 
l'oggetto puntato).

Esempio stupido:

def fanulla(dizionario):
     #dizionario[1]="uno"
     d = "ciao"
     print ("dentro fanulla d vale ", d)

d = {}

print("prima di fanulla d vale ", d)
fanulla(d)
print("dopo fanulla d vale ", d)

Se togli il # dentro la funzione, il dizionario viene modificato.

Oppure non ho capito nulla del tuo problema, in tal caso chiedo venia!
ciao.


Maggiori informazioni sulla lista Python