Il 06/05/22 09:34, Yuri ha scritto:
Ciao,
se non si modifica la variabile all'interno della funzione, si può
usare la variabile esterna:
>>> d = 0
>>> def test():
... print(d)
...
>>> test()
0
Se invece si tenta di modificarla:
>>> def test():
... print(d)
... d = 1
...
>>> d = 0
>>> test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in test
UnboundLocalError: local variable 'd' referenced before assignment
Scusate, ovviamente qui l'errore è dovuto al fatto che uso d e poi la
ricreo localmente. Qui python vede l'assegnazione e decide che la
variabile è locale, quindi quando esegue il codice vede un riferimento a
d prima che questa venga creata localmente. Se invece facessi solo
"print(d)" o "d=1", l'errore non ci sarebbe stato perché o usa solo il
valore globale o crea una nuova variabile locale.
Ci pare di capire che Gabriele vuole modificarla ma non ottiene
l'errore, e quindi potrebbe essere questa la situazione:
>>> d = {}
>>> def test():
... d[0] = 1
...
>>> test()
>>> d
{0: 1}
qui non viene dato errore perché d non viene modificata ma solo usata
come puntatore al contenuto del dizionario.
Magari con queste informazioni Gabriele ha un quadro più chiaro.
Gabriele: puoi mostrarci il codice o almeno la parte essenziale?
Il 06/05/22 08:44, Luigi Russo ha scritto:
Il 05/05/2022 16:16, Gabriele Battaglia ha scritto:
Chiedo venia, so che non si dice così ma non mi viene un termine
migliore, forse inspecting... :)
Comunque.
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.
Come si indaga su un problema di questo genere? Io non riesco a
trovare l'inghippo.
Gigi:
Ciao Gabriel,
se intendi modificare la variabile globale d dovrai inserire nella
funzione la parola chiave global, esempio:
d = {}
def modificad():
global d
d = {'Cane': 'Bau'}
print(d)
Ciao da Gigi
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python