Czy są jakieś istotne różnice między dict.items()
i dict.iteritems()
?
dict.items()
: Zwraca kopię listy słownika par (klucz, wartość).
dict.iteritems()
: Zwraca iterator nad parami słownika (klucz, wartość).
Jeśli uruchomię poniższy kod, wydaje się, że każdy zwraca odwołanie do tego samego obiektu. Czy brakuje mi subtelnych różnic?
#!/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'
Wynik:
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
zawsze zwraca True, ponieważ Python utrzymuje tablicę obiektów całkowitych dla wszystkich liczb całkowitych od -5 do 256: docs.python.org/2/c-api/int.html Kiedy tworzysz liczbę całkowitą w tym zakresie, po prostu odzyskam odniesienie do istniejącego obiektu: >> a = 2; b = 2 >> a is b True
Ale,>> a = 1234567890; b = 1234567890 >> a is b False
iteritems()
zmieniono na iter()
w Python 3? Powyższy link do dokumentacji wydaje się nie pasować do tej odpowiedzi.
items()
tworzy elementy jednocześnie i zwraca listę.iteritems()
zwraca generator - generator to obiekt, który „tworzy” jeden element za każdym razem, gdynext()
jest do niego wywoływany.