显然 xrange 更快,但我不知道为什么它更快(到目前为止,除了轶事之外还没有证据表明它更快)或除此之外还有什么不同
for i in range(0, 20):
for i in xrange(0, 20):在 Python 2.x 中:
 range创建一个列表,因此,如果执行range(1, 10000000)它将在内存中创建一个包含9999999元素的列表。
 xrange是一个懒惰求值的序列对象。
在 Python 3 中:
range等效于 Python 2 的xrange 。要获取列表,您必须显式使用list(range(...)) 。xrange不再存在。range 创建一个列表,因此,如果执行
range(1, 10000000)它将在内存中创建一个包含9999999元素的列表。
xrange是一个生成器,因此它是一个序列对象,是一个懒惰求值的对象。
的确如此,但是在 Python 3 中, range()将由 Python 2 xrange() 。如果需要实际生成列表,则需要执行以下操作:
list(range(1,100))记住,请使用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()仍将为您提供良好的迭代器行为。