range - range() 和 xrange() 之间的区别
问题描述
我正在阅读有关 Python 的教程,它说“有一个变体 xrange() 可以避免为性能敏感的情况构建整个列表的成本(在 Python 3000 中,range() 将具有良好的性能行为,你可以忘记关于 xrange())。” 来源。
我问的是 Python 2.x 而不是 Python 3。
我不确定这意味着什么。我是否理解range(a, b)
创建从a
to的所有值的列表b
然后对其进行迭代,而xrange(a, b)
仅在迭代时创建每个值?如果是这种情况,那么只有在代码实际上没有遍历整个列表并提前中断时,性能才会得到提高。
有人可以对此发表评论吗?
解决方案
你理解正确。
区别在于内存:当使用range()
整个列表时,将在内存中分配,而xrange()
返回一个生成器(实际上它返回一个充当生成器的 xrange 对象)
Python 的文档在这个xrange()
主题上非常清楚:
xrange() 相对于 range() 的优势是最小的(因为 xrange() 在被要求时仍然必须创建值),除非在内存不足的机器上使用非常大的范围或当范围的所有元素都是没用过
推荐阅读
- python - 为python中的每种方法获取AST?
- android - 带有滚动手势选项的自定义列表视图不单击
- php - 无法在 Big Sur 上使用 Apache 对 PHP v7.4 进行代码设计
- python - 如何制作将列表作为输入并返回总和的函数?
- r - R中在数据帧循环中应用函数的最佳方法
- jenkins - Jenkins:如果节点离线,远程触发参数化作业不是跳过作业,而是中止构建
- three.js - geometry.attributes 在 three.js 0.124 中为空
- apache-kafka - Kafka Stream API 在 Kstream 和 Ktable 之间加入
- reactjs - Formik axios 将数据发布到联系表格 7,空字段
- google-bigquery - Big Query 查询表并存储结果