Existe-t-il des différences applicables entre dict.items()
et dict.iteritems()
?
Depuis les documents Python :
dict.items()
: Renvoie une copie de la liste des paires (clé, valeur) du dictionnaire.
dict.iteritems()
: Retourne un itérateur sur les paires (clé, valeur) du dictionnaire.
Si j'exécute le code ci-dessous, chacun semble renvoyer une référence au même objet. Y a-t-il des différences subtiles qui me manquent?
#!/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'
Production:
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
retournerait toujours True car python conserve un tableau d'objets entiers pour tous les entiers compris entre -5 et 256: docs.python.org/2/c-api/int.html Lorsque vous créez un int dans cette plage, vous en fait juste récupérer une référence à l'objet existant: >> a = 2; b = 2 >> a is b True
Mais,>> a = 1234567890; b = 1234567890 >> a is b False
iteritems()
changé iter()
en Python 3? Le lien de documentation ci-dessus ne semble pas correspondre à cette réponse.
items()
crée les éléments en une seule fois et renvoie une liste.iteritems()
renvoie un générateur - un générateur est un objet qui "crée" un élément à la fois chaque fois qu'ilnext()
est appelé dessus.