假设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