显然,在几乎每个实例中,使用values
,items
和keys
在Python 2.X中都是不好的做法,因为你会分配一个额外的列表而不是实际的需要。因此,一段时间以来,推荐的最佳做法是使用iteritems
/ itervalues
,如果您想枚举__iter__
,则使用内置dict
密钥。
将Python 3的keys
,values
和items
的后端移植到Python 2.7作为viewkeys
,viewvalues
和viewitems
,我想知道view*
函数系列与其iter*
对应函数的实际性能权衡是什么。是继续使用您针对Python 2.6及更早版本的iter*
函数的唯一原因,还是较旧的iter*
方法在某些上下文中比较新的view*
方法更快?
答案 0 :(得分:8)
以下是解答iterkeys
与viewkeys
的答案:https://stackoverflow.com/a/10190228/344143
摘要(带有一点背景故事):view*
方法是数据的实时视图(在更新时会更新),而iter*
和普通*
更多喜欢快照。
链接的回答者建议虽然view*
- 风格的方法也可能具有较小的性能优势,但可能与backport存在兼容性问题,并建议继续使用iter*
/ {{1在Python 2下。
我的观点:如果你想要一个实时视图并且你在Python 2下,请使用*
;如果你只是想要翻过一组键/值/项,请使用view*
;如果你想暂停一下k / v / i的快照(或以某种非线性方式迭代),请使用iter*
。让性能滑动直到你在内循环中拾取它。