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)
会报错