假設mydict
是一個Python字典。字典爲什麼需要這些'iter'方法?
mydict = {'a': 1, 'b': 2}
我可以用items
遍歷它的元素:
for k,v in mydict.items():
print k,v
或者使用iteritems
:
for k,v in mydict.iteritems():
print k,v
有什麼區別?我認爲python的理念是「只有一種方法可行」?
假設mydict
是一個Python字典。字典爲什麼需要這些'iter'方法?
mydict = {'a': 1, 'b': 2}
我可以用items
遍歷它的元素:
for k,v in mydict.items():
print k,v
或者使用iteritems
:
for k,v in mydict.iteritems():
print k,v
有什麼區別?我認爲python的理念是「只有一種方法可行」?
在Python 3中,dict.iter...()
方法已被刪除並替換正常的方法。
它們作爲迭代器添加到字典後的語言中存在,所以dict.items()
返回一個列表。已添加dict.iter...()
方法以允許人們製作更高效的程序(因爲迭代器是懶惰的),但也不會破壞與期望列表的舊程序的兼容性。
由於Python 3打破了兼容性,這已被修復。 (中dict.iter()
舊的使用可以與list(dict.iter())
生成需要注意的是在Python 3 dict.items()
實際上返回一個dictionary view - 。它可以遍歷,而且還提供其他功能
在Python 2,mydict.items
返回一個新的列表 。使用iteritems
節省內存,而且是更有效的。
>>> d = dict((f, r) for f, r in zip(range(10000), reversed(range(10000))))
>>> %timeit for i in d.iteritems(): i
1000 loops, best of 3: 456 us per loop
>>> %timeit for i in d.items(): i
1000 loops, best of 3: 811 us per loop
但(正如其他人所指出的)items
是保持不變在Python 2向後兼容。
在Python 3中,此問題已修復; items
返回一個「view」(它既不是列表也不是迭代器,而是字典條目變化時的「動態視圖」),並且iteritems
不再存在,它的表兄弟itervalues
和iterkeys
也不再存在。
我認爲python的哲學是'只有一種方法可以做'?
的原因既items()
和iteritems()
存在是歷史性的:
最初,只有items()
存在。它返回了列表。
在Python 2.2中,iteritems()
被介紹了。它返回了一個迭代器。
在Python 2.7中,viewitems()
被介紹了。它返回了一個view。
的Python 3藉機整理一下這件事:iteritems()
和items()
得到了下降,viewitems()
得到改名爲items()
。
原因iteritems()
和viewitems()
在2.x中添加新的功能,而不是簡單地更換items()
是把所有2.x版本向後兼容的願望。
這已[已被問](http://stackoverflow.com/q/4550645/589206)之前與一個非常詳細的接受答案。 – hochl 2012-03-29 14:18:26