如果我们要创建1000000个数字的列表而不是使用范围(1000000)并不是一个很酷的主意,我读了这个,因为这需要很多内存,并且很快就会调用这个range(),它会创建一个输入列表大小而xrange(1000000)会更好,因为它会根据需要创建值
说我有这个小程序:
for i in xrange(1000000):
print i
每次调用for
循环时,这是否会在我们调用xrange(1000000)
时创建列表中的下一个位置?
答案 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()
生成该步骤的下一个整数。