Python for循环 - 为什么这不是无限循环?

Rya*_*yan 5 python for-loop infinite-loop

考虑以下Python代码片段:

x = 14
for k in range(x):
    x += 1
Run Code Online (Sandbox Code Playgroud)

在执行结束时,x等于28.

我的问题:这段代码不应该永远循环吗?在每次迭代时,它会检查是否k小于x.但是,x在for循环中递增,因此它具有较高的值用于下一次比较.

Jay*_*hik 9

range(x)不是"命令".它创建一个范围对象,循环遍历该范围.更改x不会更改使用它创建的所有对象.

>>> x = 2
>>> k = range(x)
>>> list(k)
[0, 1]
>>> x += 1
>>> list(k)
[0, 1]
Run Code Online (Sandbox Code Playgroud)


Vic*_*loy 6

不会,range(x)将返回带有[0,1,2,3,4,5,6,7,8,9,10,11,12,13]项的列表,这些项将被迭代.每次循环体被评估时x的值都会发生变化,但这不会影响已经生成的列表.

换句话说,您将迭代的集合将只生成一次.

  • 为了迂腐,它返回Python 2中的列表和Python 3中的`range`对象. (2认同)