[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