[Python] Indagine su una variabile.

Yuri yurj a alfa.it
Ven 6 Maggio 2022 09:49:00 CEST


Il 06/05/22 09:34, Yuri ha scritto:
> 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

Scusate, ovviamente qui l'errore è dovuto al fatto che uso d e poi la 
ricreo localmente. Qui python vede l'assegnazione e decide che la 
variabile è locale, quindi quando esegue il codice vede un riferimento a 
d prima che questa venga creata localmente. Se invece facessi solo 
"print(d)" o "d=1", l'errore non ci sarebbe stato perché o usa solo il 
valore globale o crea una nuova variabile locale.


>
> 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 a lists.python.it
>> https://lists.python.it/mailman/listinfo/python
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> https://lists.python.it/mailman/listinfo/python


Maggiori informazioni sulla lista Python