Python 2.X中range和xrange函数的区别是什么?
看起来xrange比range快,但我不知道为什么它更快(目前除了听说的,没有其他证据证明它确实更快),也不知道它和其他的有什么不同。
for i in range(0, 20):
for i in xrange(0, 20):
28 个回答
123
记住,要测试小段代码哪个更快,可以使用 timeit
模块!
$ python -m timeit 'for i in range(1000000):' ' pass'
10 loops, best of 3: 90.5 msec per loop
$ python -m timeit 'for i in xrange(1000000):' ' pass'
10 loops, best of 3: 51.1 msec per loop
就我个人而言,我总是使用 range()
,除非我在处理非常非常大的列表。就像你看到的,对于一个有一百万个条目的列表来说,多出来的时间也只有0.04秒。而且正如Corey所说,在Python 3.0中,xrange()
会被淘汰,range()
也会给你很好的迭代器效果。
239
range会创建一个列表,所以如果你写
range(1, 10000000)
,它会在内存中生成一个包含9999999
个元素的列表。
xrange
是一个生成器,它会按需生成序列中的元素。
这在Python 3中是正确的,但在Python 3里,range()
实际上是用Python 2中的 xrange()
实现的。如果你真的需要生成一个列表,你需要这样做:
list(range(1,100))
1035
在 Python 2.x 中:
range
会创建一个列表,所以如果你写range(1, 10000000)
,它会在内存中生成一个包含9999999
个元素的列表。xrange
是一个序列对象,它会按需生成元素,也就是说它不会一次性把所有元素都放到内存里。
在 Python 3 中:
range
的功能和 Python 2 的xrange
一样。如果你想要得到一个列表,你需要明确地使用list(range(...))
。xrange
已经不再存在了。