Ciao,

 serve, appunto, a segnalare che stai usando quella globale. Se cambi la tua funzione in modo che stampi solo d senza definirla, ti tornerà 1:

>>> def mo():
...  print(d)
...
>>> d=1
>>> mo()
1

Se invece vuoi modificarla, allora la devi definire localmente (ma resta lì) oppure usare global.

>>> def mo():
...  global d
...  d=2
...  print(d)
...
>>> d=1
>>> mo()
2
>>> d
2

>>> def mo():
...  d=2
...  print(d)
...
>>> d=1
>>> mo()
2
>>> d
1


Il 17/05/22 16:55, Gabriele Battaglia ha scritto:

Reply to Yuri's message, wrote on 05/05/2022 at 17:03:

Il 05/05/22 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.

All'interno ti risulta modificata?
Ciao Yuri. Sì, è modificata.

Ti copio dalla console.


>>> def mo():
...     d=2
...     print(d)
...     return
...
>>> d
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'd' is not defined
>>> d=1
>>> d
1
>>> mo()
2
>>> d
1



Allora. parlando di scopes, io avevo capito che quando ti riferisci ad una variabile, Python crea una variabile locale se non ne esiste già una con lo stesso nome. Cioè, se la variabile a cui mi riferisco esiste già ed è stata creata da uno scope superiore, tipo il main in questo caso, allora usa quella.

A questo punto allora però la mia confusione cresce perchè non capisco più a cosa serva la chiave global


:)


Devo tornare a leggere le basi di Python. Povero me.

Gabry. :)

il mio consiglio è lanciare lo script via pdb (o la parte di script che interessa valutare). Puoi anche aprire un prompt interattivo di python e all'interno definire la tua variabile d e poi

>> from script import funzionemodificad

>> pdb.runcall(funzionemodificad)

in questo modo puoi vedere passo passo cosa succede. Alla fine della funzione torni al prompt e hai la tua variabile d, che puoi stampare con un print.




Come si indaga su un problema di questo genere? Io non riesco a trovare l'inghippo.


Grazie per il vostro sempre illuminante aiuto.


Gabry.


_______________________________________________
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

Rispondere a