Ci sono differenze applicabili tra dict.items()
e dict.iteritems()
?
Dai documenti di Python :
dict.items()
: Restituisce una copia dell'elenco di coppie (chiave, valore) del dizionario.
dict.iteritems()
: Restituisce un iteratore sulle coppie (chiave, valore) del dizionario.
Se eseguo il codice qui sotto, ognuno sembra restituire un riferimento allo stesso oggetto. Ci sono delle sottili differenze che mi mancano?
#!/usr/bin/python
d={1:'one',2:'two',3:'three'}
print 'd.items():'
for k,v in d.items():
if d[k] is v: print '\tthey are the same object'
else: print '\tthey are different'
print 'd.iteritems():'
for k,v in d.iteritems():
if d[k] is v: print '\tthey are the same object'
else: print '\tthey are different'
Produzione:
d.items():
they are the same object
they are the same object
they are the same object
d.iteritems():
they are the same object
they are the same object
they are the same object
d[k] is v
restituirei sempre True perché python mantiene un array di oggetti interi per tutti i numeri interi compresi tra -5 e 256: docs.python.org/2/c-api/int.html Quando crei un int in quell'intervallo, in realtà solo un riferimento all'oggetto esistente: >> a = 2; b = 2 >> a is b True
Ma,>> a = 1234567890; b = 1234567890 >> a is b False
iteritems()
cambiato iter()
in Python 3? Il link della documentazione sopra non sembra corrispondere a questa risposta.
items()
crea gli elementi tutti in una volta e restituisce un elenco.iteritems()
restituisce un generatore - un generatore è un oggetto che "crea" un oggetto alla volta ogni volta chenext()
viene chiamato su di esso.