一、xrange是什么?
xrange是python3中的range函数的祖宗,它的作用与range函数类似,都是生成一个整数序列。但是,xrange对象不是生成一个完整的序列,而是在需要时生成,不会浪费内存,因而可以应用于特别大的范围,应用更为广泛。
在Python3中,range函数的返回值是一个range对象,相对于Python2中的列表,range对象更省内存。Python3还为我们提供了新的关键字yield from
可以自动处理嵌套循环,此时的range就成为了xrange,起到一定的优化作用。
二、xrange的优点
xrange的优点在于它的“懒惰性”,相比于range函数,它在需要时才会生成数据,而不是一次生成完整的数据序列。这个“懒惰性”可以减小内存消耗,在特别大的运算时非常有效。举个例子:
a = range(10000000000) # 在Python2中会立即生成一个存储1~10000000000的列表对象
b = xrange(10000000000) # 在Python2中不会立即生成列表,只是在需要获取数据时才开始生成
在使用for循环时,range会一次性生成一个10000000000个元素的列表,而xrange只会在每次循环时生成一个元素,此时占用的内存最多只有一个元素。
三、xrange与range的区别
其实,在Python3中已经将xrange和range合并为同一个函数range,但是,我们还是可以通过import函数来使用Python2时代的xrange。 由于Python3中的range性能优化,xrange与range之间的效率差距已经缩小了很多。所以在绝大部分情况下,range可以完全满足我们的需求。但是,在处理数据量非常大的情况下,xrange仍然有其不可替代的优势。
四、xrange的使用方法
使用方法与range类似,只需要调用xrange()函数即可。如下所示:
for i in xrange(10):
print(i)
以上是最基本,最常用的用法,当然,xrange还有很多高级用法,比如,可以指定步长、指定起始值和结束值、倒序循环等等。下面是一些常见的高级用法:
五、xrange的高级用法
1、指定起始值和结束值
指定起始值和结束值只需要在xrange()函数的参数中指定即可,语法如下:
xrange(start, stop)
start
表示起始值,stop
表示结束值,生成的序列是[start, stop)
。
for i in xrange(2, 8):
print(i)
以上代码输出2到7之间的整数。
2、指定步长
我们也可以指定步长,语法如下:
xrange(start, stop, step)
step
表示步长,生成的序列是[start, stop)
之间以步长step
递增的整数序列。
for i in xrange(0, 10, 2):
print(i)
以上代码输出0到8之间,步长为2的整数序列。
3、倒序循环
我们也可以用xrange实现倒序循环,语法如下:
for i in xrange(stop-1, start-1, -1):
print(i)
这里stop-1
是因为xrange生成的序列是[start, stop)
。start-1
是因为我们想要的是[start, stop]
。当然,如果不止想要[start, stop]
,而是想要[start, stop]
之间步长为step
的整数序列,代码可以改写为:
for i in xrange(stop-1, start-1, -step):
print(i)
六、xrange与range的适用场景
在绝大部分情况下,range就可以完全满足我们的需求,xrange并不是必须使用的。当然,在特别大的运算时,xrange的优势非常明显。通过本文的介绍,我们可以更好地了解range和xrange的差异,选择更合适的函数,提高代码的执行效率。