【问题标题】:Difference between range() and xrange()range() 和 xrange() 之间的区别
【发布时间】:2019-01-23 20:19:16
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: range python-2.x xrange


    【解决方案1】:

    你没看错。

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

    关于xrange()Python's documentation 在这个问题上非常清楚:

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

    【讨论】:

      【解决方案2】:

      在 python3 中,range() 不会一次生成整个序列,因此它也很高效:

      范围类型相对于常规列表或元组的优点是范围对象将始终占用相同(少量)的内存,无论它表示的范围大小(因为它只存储开始、停止和步长值,根据需要计算单个项目和子范围)。

      Documentation

      【讨论】:

        猜你喜欢
        • 2012-02-20
        • 1970-01-01
        • 2016-12-28
        • 2010-10-17
        • 2021-03-21
        • 2018-02-18
        • 2010-09-10
        相关资源
        最近更新 更多