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