Python范围生成器是否生成所有值或逐步生成它们?

Dzy*_*ann 8 python python-2.7

当你做这样的事情:

for i in range(5):
      print i
Run Code Online (Sandbox Code Playgroud)

Python做什么?它首先使用[0,1,2,3,4]生成一个数组,然后遍历打印它的每个项目吗?相近:

for i in [0,1,2,3,4]:
  print i
Run Code Online (Sandbox Code Playgroud)

或者是否在生成它们时打印每个数字?就像是:

生成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范围与Python 3范围进行比较的信息非常有价值.

jvd*_*vdm 7

在Python 2中,range()返回整个列表对象,然后迭代该列表对象for.

在Python 3中,它返回一个内存有效的iterable,它是一个自己的对象,具有专用的逻辑和方法,而不是列表.现在 for将得到该迭代生成的每个值.

在Python 2中xrange(),可以获得类似Python 3的 range()功能.Python 2的xrange介于Python 2的范围和Python 3的范围之间.它比前者好,但不如后者好.

最后,在Python 3中,如果你想要整个列表:

>>> list(range(...))
Run Code Online (Sandbox Code Playgroud)