我读过xrange是懒惰的,它在最后一刻是有效的

时间:2014-09-04 12:54:08

标签: python

如果我们要创建1000000个数字的列表而不是使用范围(1000000)并不是一个很酷的主意,我读了这个,因为这需要很多内存,并且很快就会调用这个range(),它会创建一个输入列表大小而xrange(1000000)会更好,因为它会根据需要创建值

说我有这个小程序:

for i in xrange(1000000):
        print i 

每次调用for循环时,这是否会在我们调用xrange(1000000)时创建列表中的下一个位置?

1 个答案:

答案 0 :(得分:1)

xrange()生成一个仅跟踪开始,停止和步长值的对象。没别了。

迭代然后利用这些值;无论如何,第5个元素总是start + (5 * step),所以just calculates that,而不是创建像range()这样的列表。

要在迭代时执行此操作,会创建单独的rangeiterator

>>> xr = xrange(100)
>>> it = iter(xr)
>>> it
<rangeiterator object at 0x100660450>
>>> next(it)
0
>>> next(it)
1

范围迭代器知道迭代的步骤,并要求xrange()生成该步骤的下一个整数。