[Python] Indagine su una variabile.
Yuri
yurj a alfa.it
Mar 17 Maggio 2022 17:21:00 CEST
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 a lists.python.it
>> https://lists.python.it/mailman/listinfo/python
>
Maggiori informazioni sulla lista
Python