range()和xrange()之间的区别

时间:2018-08-16 19:51:11

标签: range python-2.x xrange

我正在阅读有关Python的教程,其中说:“有一个xrange()变体,它避免了为性能敏感的情况构建整个列表的成本(在Python 3000中,range()将具有良好的性能表现,您可以忘记xrange()。” Source

我要问的是Python 2.x,而不是Python3。

我不确定这是什么意思。我是否了解range(a, b)创建了一个从ab的所有值的列表,然后对其进行迭代,而xrange(a, b)仅在迭代时创建了每个值?如果是这种情况,那么只有在代码实际上没有遍历整个列表并尽早中断的情况下,性能才能得到改善。

有人可以对此发表评论吗?

2 个答案:

答案 0 :(得分:0)

您理解正确。

区别在于内存:使用range()时,整个列表将分配到内存中,而xrange()返回a generator(实际上,它返回充当生成器的xrange对象)

关于xrange()的{​​{3}}在这个问题上很清楚:

  

xrange()优于range()的优势很小(因为xrange()仍然需要在创建值时创建值),除非在内存不足的计算机上使用了非常大的范围,或者所有范围元素从未使用

答案 1 :(得分:0)

在python3中, <input {...getInputProps({ type: 'search', placeholder: 'Search For An Item', id: 'search', className: this.state.loading ? 'loading' : '', onChange: e => { e.persist(); this.onChange(e, client); }, })} />不会一次生成整个序列,因此它也是高效的:

  

与常规列表或元组相比,范围类型的优势在于,范围对象将始终占用相同(少量)的内存,无论其表示的范围大小如何(因为它仅存储开始,停止和步长值,并根据需要计算各个项目和子范围。

Documentation