Python range and xrange - zhongjiajie/zhongjiajie.github.com GitHub Wiki

Python range and xrange

本文主要比较了Python3的range和Python2的xrange功能.

其中Python2的rangexrange功能可以简单理解成range返回的是list对象,而xrange返回的是可迭代对象, xrangerange更加节省资源, 对较大的需求更加友好.

py3的range和py2的xrange对比

Python3的range比Python2的xrange功能更强大

相似性

  • 都是惰性的
  • 都有描述性字符串形式
  • 都是一个迭代器
  • 都可以指定起点终点步长
  • 都支持len方法
  • 支持正序倒序索引
  • 都被视为序列from collections import Sequence类型

不相似

  • range支持相等性检验,实质是比较range对象的start stop step三个属性是否一致; xrange==默认进行一致性检验,实质是检验对象id是否一致
  • 切片: range支持切片, xrange不支持切片
  • 包含性检验: rangexrange都支持但是实现原理不一样, range对象实现了__contains__方法但是xrange没有, xrange包含项检验默认检验元素是否在list里面, range则是判断(x - range.start) / range.step是否整除
  • range有start stop step三个属性: 要得到两者在数轴相反方向的镜像, rangen=range(5, 20); range(-n.start, -n.stop, -n.step); xrange要n=xrange(5, 20); xrange(-n[0], -n[-1]+1, n[1]-n[0])
  • range可以接受更大的数: range(10 ** 19)不会报错但是xrange(10 ** 19)会报错

⚠️ **GitHub.com Fallback** ⚠️