这两个基本上都是在循环的时候用。
range函数返回的是一个列表,而xrange返回的是一个不可改变的XRangeType对象。这是一个迭代器,也就是只有用到那个数时才临时通过计算提供值。当参数很大时,xrange能够有效地利用内存。
>>> rg = range(0,10)
>>> type(rg)
list
>>> for i in rg:
....: print i
....:
0
1
2
3
4
5
6
7
8
9
>>> xrg = xrange(0,10)
>>> type(xrg)
xrange
>>> for i in xrg:
....: print i
....:
0
1
2
3
4
5
6
7
8
9
>>> for i in range(10000000):
.... print i
由于list占用内存太大,系统无法分配足够大的内存,执行会出错
>>> for i in xrange(10000000):
... print i
1
2
...
10000000
所以xrange做循环的性能比range好,尤其是返回很大的时候,所有如果不是非要获得一个列表,应该尽量用xrange。
类似的还有f.readlines()和f.xreadlines()两个函数。
其中f.readlines()读取所有的行并返回一个包含所有行的列表,而f.xreadlines函数返回一个迭代器,每次迭代返回文件的一个新行。