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

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

Reply via email to