Python的range生成器是生成所有值还是逐步生成并返回它们?
Python的range生成器是生成所有值还是逐步生成并返回它们?
这个问题已经有了答案:
为什么在Python 3中\"1000000000000000 in range(1000000000000001)\"的速度如此之快?
当你做这样的事情时:
for i in range(5): print i
Python会做什么?它会首先生成一个数组[0,1,2,3,4],然后遍历每个项并打印它吗?
类似于:
for i in [0,1,2,3,4]: print i
还是在生成每个数字时就打印它们?像这样:
生成0->将0赋给i->打印i
生成1->将1赋给i->打印i
生成2->将2赋给i->打印i
生成3->将3赋给i->打印i
生成4->将4赋给i->打印i
更新
我已经添加了Python 2.7的标签。我没有认为我的问题是特定于版本的,但似乎是这样!
现在我正在使用Python 2.7,所以我的问题是关于它的。但我发现比较Python 2的range和Python 3的range的信息非常有价值。
admin 更改状态以发布 2023年5月21日
在Python 2中,range()
返回整个列表对象,然后该列表对象被for
循环迭代。
在Python 3中,它返回一种内存高效的可迭代对象,它是一个具有专用逻辑和方法的对象,而不是一个列表。现在,for
将在该可迭代对象生成每个值时获取该值。
在Python 2中,有xrange()
可以获取类似于Python 3中range()
的东西。Python 2的xrange介于Python 2的range和Python 3的range之间。它比前者好,但不如后者。
最后,在Python 3中,如果你想要整个列表,可以这样做:
>>> list(range(...))