[Python] Scope delle variabili.

Alessandro Dentella sandro a e-den.it
Mar 3 Feb 2015 10:28:01 CET


On Tue, Feb 03, 2015 at 10:12:50AM +0100, Gollum1 wrote:
> Mi sto perdendo qualcosa...
> 
> numbers_urls = dict()
> number_count = 0
> 
> def numbers_start_element(name, attrs):
>     if name == 'number':
>         number_count += 1
> 
>     if 'uri' in attrs.keys():
>         numbers_urls[name] = attrs['uri']
> 
>     print(number_count)
> 
> 
> Perché numbers_urls viene visto correttamente come variabile "globale"
> e modificata, mentre number_count no? sono sicuro che mi sto perdendo
> in una banalità oscena.

Non so se è una banalità, ma non direi. 
Nessuna delle 2 variabili viene passata in argomento ma una è mutable
e l'altra no.

Quando scrivi "numbers_urls[name] = attrs['uri']" non stai
riassegnando la variabile, ma la stai solo modificando (prova a
riassegnarla e vedi che all'esterno NON vedi il cambiamento).
Con gli immutable non puoi fare una modifica, quindi il "+= 1"
equivale ad un rebind della variabile che quindi viene fatto solo
nello scopo locale.

sandro
*:-)


-- 
Sandro Dentella  *:-)
http://www.reteisi.org             Soluzioni libere per le scuole
http://sqlkit.argolinux.org        SQLkit home page - PyGTK/python/sqlalchemy





Maggiori informazioni sulla lista Python