Python range and xrange - zhongjiajie/zhongjiajie.github.com GitHub Wiki
本文主要比较了Python3的range和Python2的xrange功能.
其中Python2的range和xrange功能可以简单理解成range返回的是list对象,而xrange返回的是可迭代对象, xrange比range更加节省资源, 对较大的需求更加友好.
Python3的range比Python2的xrange功能更强大
- 都是惰性的
- 都有描述性字符串形式
- 都是一个迭代器
- 都可以指定起点终点步长
- 都支持
len方法 - 支持正序倒序索引
- 都被视为序列
from collections import Sequence类型
-
range支持相等性检验,实质是比较range对象的start stop step三个属性是否一致;xrange的==默认进行一致性检验,实质是检验对象id是否一致 - 切片:
range支持切片,xrange不支持切片 - 包含性检验:
range和xrange都支持但是实现原理不一样, 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)会报错