在for循环中使用range()时,列表实例化的是什么程序?

时间:2014-11-08 23:03:48

标签: python

我想知道在range()

中使用时for loop函数
for x in range(100):
    print x

range在进入循环之前是否会初始化整个iter-able列表,还是足够聪明,可以在增量时生成值?

换句话说,如果我说。像这样的非常大的范围会有开销吗?

  for x in range(1000**1000):
      value = x

4 个答案:

答案 0 :(得分:2)

这取决于Python版本:

  • 在Python 3中,range()是一个类似于生成器的对象,可以按需生成值。
  • 在Python 2中,range()创建了一个物化列表。如果您想要类似生成器的对象,请使用xrange()

答案 1 :(得分:2)

In Python 3, range产生一个"不可变序列"不是生成器或迭代器

In Python 2, range生成一个列表,Python 2也有xrange来创建一个"不透明序列的对象"它实际上没有内存开销,但是在Python 3中没有xrange

答案 2 :(得分:1)

如有任何疑问,很容易检查。在IDLE中(例如使用Python 3.3):

>>> r = range(10)
>>> print(r)
range(0, 10)
>>> print(list(r))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

答案 3 :(得分:1)

是的!如果使用range(),python在进入循环之前初始化整个iter-able列表。但是有一种简单的方法可以使用xrange()来克服这种开销,它会在增量时生成值。这可以验证为:

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> xrange(10)
xrange(10)