Python的range生成器是生成所有值还是逐步生成并返回它们?

27 浏览
0 Comments

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日
0
0 Comments

在Python 2中,它返回值的列表。尝试使用以下命令查看:

print range(4)

在Python 3中,它返回一个可迭代对象。你可以使用以下命令将其转换为list

print(list(range(4))

0
0 Comments

在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(...))

0