[Python] Esercizio da un libro...

Gollum1 gollum1.smeagol1 a gmail.com
Dom 13 Ott 2013 16:21:10 CEST


Il 13 ottobre 2013 12:48, enrico franchi <enrico.franchi a gmail.com> ha scritto:
>
>
>
> 2013/10/13 Gollum1 <gollum1.smeagol1 a gmail.com>
>>
>> ciao a tutti, ho trovato questo bel libro[1] in formato epub, che mi
>> ha permesso di capire alcune cosine che non riuscivo proprio a farmi
>> entrare in testa, per esempio sono finalmente riuscito a capire i
>> generatori, che per quanto leggessi i vostri post, non mi riusciva
>> proprio di farmi entrare in testa... e il bello è che il libro è
>> scritto in inglese, e il mio inglese è moooolto arrugginito, ma
>> miracolosamente riesco a capirlo (merito forse dell'introduzione che
>> ho fatto con i libri in italiano di Marco B.).
>>
>> ma veniamo alla domanda...
>>
>> >>> d=dict(november=11, oscar=12, papa=13, quebec=14)
>> >>> v1=v2=d.keys()
>>
>> >>> v1,v2
>> (dict_keys(['november', 'oscar', 'papa', 'quebec']),
>> dict_keys(['november', 'oscar', 'papa', 'quebec']))
>> >>> v1[3]="X"
>> Traceback (most recent call last):
>>   File "<console>", line 1, in <module>
>> TypeError: 'dict_keys' object does not support item assignment
>>
>> e questo mi pare abbastanza comprensibile... praticamente non posso
>> cambiare la chiave di un dizionario...
>
>
> No. Praticamente in Python 3, keys() ti ritorna una "vista" non modificabile
> sopra la sequenza delle chiavi presenti nel dizionario.
>
> In Python 2, per capirci, non e' cosi'.
>
> In [1]: d=dict(november=11, oscar=12, papa=13, quebec=14)
>
> In [2]: v1=v2=d.keys()
>
> In [3]: v1,v2
> Out[3]:
> (['oscar', 'november', 'papa', 'quebec'],
>  ['oscar', 'november', 'papa', 'quebec'])
>

ecco l'arcano... in python 3 invece mi restituisce un oggetto diverso...

>>> v1,v2
(dict_keys(['november', 'oscar', 'papa', 'quebec']),
dict_keys(['november', 'oscar', 'papa', 'quebec']))
e quindi immutabili.
quindi è corretto il comportamento dell'interprete, ed è sbagliato il
concetto che voleva evidenziare l'esercizio...

Il discorso dell'uguaglianza e dell'identità credo di averlo capito
correttamente.

[...]
>
> In [10]: v1=v2=d.keys()
>
> Dai due diversi nomi allo stesso oggetto. Che e' appunto lo stesso.
> Quindi quando lo modifichi, lo modifichi, a prescindere dal nome con cui gli
> accedi.
>

Perfetto... quindi in questo caso la discrepanza con il testo è un
differente comportamento per le diverse versioni di interprete.
il mio dubbio era solamente questo (però... ora che ci penso... avrei
potuto fare la prova con python 2.7, che ho comunque installato...)

grazie.
Byez
-- 
Gollum1
Tesssssoro, dov'é il mio tessssoro...


Maggiori informazioni sulla lista Python