首页 > 解决方案 > range() 和 xrange() 之间的区别

问题描述

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

我问的是 Python 2.x 而不是 Python 3。

我不确定这意味着什么。我是否理解range(a, b)创建从ato的所有值的列表b然后对其进行迭代,而xrange(a, b)仅在迭代时创建每个值?如果是这种情况,那么只有在代码实际上没有遍历整个列表并提前中断时,性能才会得到提高。

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

标签: rangepython-2.xxrange

解决方案


你理解正确。

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

Python 的文档在这个xrange()主题上非常清楚:

xrange() 相对于 range() 的优势是最小的(因为 xrange() 在被要求时仍然必须创建值),除非在内存不足的机器上使用非常大的范围或当范围的所有元素都是没用过


推荐阅读