在Python 2中,viewvalues()/viewitems()与itervalues()/iteritems()之间的性能权衡是什么?

在Python 2中,viewvalues()/viewitems()与itervalues()/iteritems()之间的性能权衡是什么?,python,performance,python-2.7,Python,Performance,Python 2.7,显然,在Python2.X中,在几乎所有实例中使用值、项和键都是不好的做法,因为您将分配一个实际上不需要的额外列表。因此,在一段时间内,推荐的最佳实践是使用iteritems/itervalues,如果要枚举dict的键,则使用内置的\uuuuuuuuuuuu 在Python3的键、值和项作为Python2.7的视图键、视图值和视图项的后端口中,我想知道视图*函数系列与它们的iter*对应项相比,实际的性能权衡是什么。是继续使用针对Python2.6及更早版本的iter*函数的唯一原因,还是旧的

显然,在Python2.X中,在几乎所有实例中使用
都是不好的做法,因为您将分配一个实际上不需要的额外列表。因此,在一段时间内,推荐的最佳实践是使用
iteritems
/
itervalues
,如果要枚举
dict
的键,则使用内置的
\uuuuuuuuuuuu


在Python3的
作为Python2.7的
视图键
视图值
视图项
的后端口中,我想知道
视图*
函数系列与它们的
iter*
对应项相比,实际的性能权衡是什么。是继续使用针对Python2.6及更早版本的
iter*
函数的唯一原因,还是旧的
iter*
方法在某些上下文中比新的
view*
方法更快?

这里有一个解决
iterkeys
viewkeys
的答案:

总结(有一点背景):
view*
方法是数据的实时视图(随着数据的更新而更新),而
iter*
和纯
*
更像快照

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

我的观点:如果你想要一个实时视图并且你在Python2下,使用
view*
;如果您只想快速浏览一次键/值/项集,请使用
iter*
;如果您想保留k/v/i的快照一段时间(或以某种非线性方式进行迭代),请使用
*
。让性能下滑,直到您在内部循环中获得性能