我读过xrange是惰性的,它在最后一刻起作用,是这样吗?

17 浏览
0 Comments

我读过xrange是惰性的,它在最后一刻起作用,是这样吗?

这个问题已经在这里有了答案

使用xrange()总是优于range()吗?

我读到,如果我们想创建一个包含1000000个数字的列表,那么使用range(1000000)不是一个好主意,因为它需要很多内存,而且只要调用这个range(),它就会创建一个该输入大小的列表,而xrange(1000000)会更好,因为它只在需要时才创建值。

假设我有这个小程序:

for i in xrange(1000000):
        print i 

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

admin 更改状态以发布 2023年5月24日
0
0 Comments

xrange()产生一个仅跟踪起始、停止和步进值的对象。没有其他东西。

然后迭代使用这些值;第5个元素总是会成为 start + (5 * step),所以它 只是计算那个,而不像 range() 创建一个列表。

为了在迭代时执行这个操作,创建了一个单独的 rangeiterator

>>> xr = xrange(100)
>>> it = iter(xr)
>>> it

>>> next(it)
0
>>> next(it)
1

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

0