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

时间:2014-02-14 15:54:13

标签: python performance python-2.7

显然,在几乎每个实例中,使用valuesitemskeys在Python 2.X中都是不好的做法,因为你会分配一个额外的列表而不是实际的需要。因此,一段时间以来,推荐的最佳做法是使用iteritems / itervalues,如果您想枚举__iter__,则使用内置dict密钥。

将Python 3的keysvaluesitems的后端移植到Python 2.7作为viewkeysviewvaluesviewitems,我想知道view*函数系列与其iter*对应函数的实际性能权衡是什么。是继续使用您针对Python 2.6及更早版本的iter*函数的唯一原因,还是较旧的iter*方法在某些上下文中比较新的view*方法更快?

1 个答案:

答案 0 :(得分:8)

以下是解答iterkeysviewkeys的答案:https://stackoverflow.com/a/10190228/344143

摘要(带有一点背景故事):view*方法是数据的实时视图(在更新时会更新),而iter*和普通*更多喜欢快照。

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

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