Python 在for循环中使用range()时,列表在哪个过程中实例化?

Python 在for循环中使用range()时,列表在哪个过程中实例化?,python,Python,我想知道在pythonfor循环中使用range()函数的情况 for x in range(100): print x 在进入循环之前,量程是否初始化了整个iter能力列表,或者它是否足够聪明,能够在增量时生成值 换句话说,如果我说。像这样的超大范围是否会产生开销 for x in range(1000**1000): value = x 这取决于Python版本: 在Python3中,range()是一个类似生成器的对象,可根据需要生成值 在Python 2中,

我想知道在python
for循环中使用
range()
函数的情况

for x in range(100):
    print x
在进入循环之前,量程是否初始化了整个iter能力列表,或者它是否足够聪明,能够在增量时生成值

换句话说,如果我说。像这样的超大范围是否会产生开销

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

这取决于Python版本:

  • 在Python3中,
    range()
    是一个类似生成器的对象,可根据需要生成值
  • 在Python 2中,
    range()
    创建一个具体化列表。如果需要类似生成器的对象,请使用

这取决于Python版本:

  • 在Python3中,
    range()
    是一个类似生成器的对象,可根据需要生成值
  • 在Python 2中,
    range()
    创建一个具体化列表。如果需要类似生成器的对象,请使用

    • 如果有任何疑问,很容易检查。在空闲状态下(例如,使用Python 3.3):


      如果有任何疑问,很容易检查。在空闲状态下(例如,使用Python 3.3):


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

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

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

      >>> range(10)
      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
      >>> xrange(10)
      xrange(10)
      
      生成“不可变序列”,而不是生成器或迭代器

      生成列表Python 2还必须生成一个“不透明序列”的对象,该对象实际上没有内存开销,但Python 3中没有
      xrange

      生成一个“不可变序列”,而不是生成器或迭代器


      生成列表Python 2还必须创建一个“不透明序列”的对象,该对象实际上没有内存开销,但Python 3中没有
      xrange

      这有点迂腐,但Python 3的
      range
      并不是真正的生成器或迭代器,这就是为什么可以在range中执行
      10**1000(10**999)
      立即,为什么
      next(range(10))
      生成
      TypeError:“range”对象不是迭代器
      。它有点迂腐,但Python 3的
      range
      并不是真正的生成器或迭代器,这就是为什么您可以立即在range(10**999)中执行
      10**1000
      以及为什么
      next(range(10))
      生成
      TypeError:“range”对象不是迭代器
      。在哪个目录/文件中可以看到range()的实现?我想学习Python是如何工作的,但我不知道从哪里开始阅读代码。@Matt您可以在CPython实现中看到它。在哪个目录/文件中我可以看到range()的实现?我想学习Python是如何工作的,但我不知道从哪里开始阅读代码。@Matt您可以在CPython实现中看到它