Python 在for循环中使用range()时,列表在哪个过程中实例化?
我想知道在pythonPython 在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中,
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实现中看到它