在Python 2中,viewvalues()/ viewitems()在itervalues()/ iteritems()上的性能权衡取舍是什么?

Ben*_*ack 8 python performance python-2.7

显然,在几乎每个实例中使用values,items并且keys在Python 2.X中都是不好的做法,因为你将分配一个你实际上并不需要的额外列表.因此,一段时间以来,推荐的最佳实践是使用iteritems/ itervalues,__iter__如果要枚举dict密钥,则使用内置函数.

随着Python 3中的反向移植的keys,values以及items到Python 2.7的viewkeys,viewvalues和viewitems,我想知道什么实际的性能折衷的的view*家庭的功能,与他们iter*同行.是继续使用iter*Python 2.6及更早版本的函数的唯一原因,还是旧iter*方法比view*某些上下文中的新方法更快?

Ben*_*her 10

以下是iterkeys对viewkeys此处的答案:https://stackoverflow.com/a/10190228/344143

摘要(带有一点背景故事):view*方法是数据的实时视图(在更新时会更新),而iter*just-plain *更像是快照.

链接的view*回答者建议虽然-flavored方法也可能具有较小的性能优势,但是backport可能存在兼容性问题,并建议继续在Python 2下使用iter*/ *.

我的看法:如果你想要一个实时视图而你是在Python 2下,请使用view*; 如果你只是想要通过一组键/值/项目,请使用iter*; 如果你想暂停一下k/v/i的快照(或以某种非线性方式迭代),请使用*.让性能滑动,直到你在内循环中拾取它.