xrange是什么意思?
L = xrange(1, 101)
print sum([i*i for i in L])
这两句怎么理解?
2016-04-04
这个 range 和 xrange 是Python 2.x 中特有的一种东西,
先说 range: 在Python 2.x 中 range() 函数 会返回一个 列表, 这样的话有一个缺点就是,当我们给range() 函数传一个很大的参数时, 会返回一个很大的列表,这样会消耗很大的内存,另外也降低了程序运行速度。
再来说 xrange: 在Python 2.x 中 xrange() 函数虽然用法和range()函数一样, 但是它 返回的不是一个列表, 而是一个 xrange 对象, 这个对象其实就是一个 可迭代的生成器。 这样说可能有点费解, 我们可以简单的理解为, 调用xrange() 函数 不占用很大的内存, 但是它又能完成 range 在Python 中的 循环迭代工作。
题主也看出来了, 我在上面回答中,一直在强调 Python 2.x , 这是因为 在Python 3.x 中, 取消了 xrange() 函数,并且对range() 函数进行了升级, 在Python3.x 中 range () 具有了 Python 2.x 中 xrange() 的各种先进特性。 这也能看出来 Python 3.x 对于Python 2.x 的升级优化。
这两个基本上都是在循环的时候用。
[python] view plaincopy
In [1]: for i in range(0,10):
...: print i
...:
0
1
2
3
4
5
6
7
8
9
In [2]: for i in xrange(0,10):
print i
...:
0
1
2
3
4
5
6
7
8
9
这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:
而xrange则不会直接生成一个list,而是每次调用返回其中的一个值【xrange返回的是一个生成器】。
[python] view plaincopy
In [3]: a=range(0,100)
In [4]: type(a)
Out[4]: list
In [5]: a=xrange(0,100)
In [6]: type(a)
Out[6]: xrange
In [7]: print a[0],a[1]
0 1
所以xrange做循环的性能比range好,尤其是返回很大的时候!
尽量用xrange吧,除非你是要返回一个列表。
举报