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

时间:2015-04-23 02:38:04

标签: python for-loop infinite-loop

考虑以下Python代码片段:

x = 14
for k in range(x):
    x += 1

执行结束时,x等于28。

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

4 个答案:

答案 0 :(得分:9)

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

>>> x = 2
>>> k = range(x)
>>> list(k)
[0, 1]
>>> x += 1
>>> list(k)
[0, 1]

答案 1 :(得分:6)

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

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

答案 2 :(得分:1)

这是因为与for in(在其他语言中)相比,python for循环具有不同的行为: range(x)不是在每次迭代中执行,而是在第一次执行,然后for in遍历其元素。 如果你想改变代码来运行无限循环,你可以使用while代替(在这种情况下,范围(x)是没有意义的。)

答案 3 :(得分:0)

python中的for loop不是迭代器,而是迭代序列/生成器,即任何形式的iterable

考虑到这一点,除非迭代是无限的,否则循环将不是无限的。 sequence不能无限,但您可以创建/使用无限生成器。一种可能性是使用itertools.count,它从指定的开始点开始以指定的间隔生成一个非结束的数字序列。

from itertools import count        |  for(;;) {
for i in count(0):                 |      //An infinite block
    #An infinite block             |  }

或者,您始终可以使用while循环来创建经典的无限循环

while True:
     #An infinite block