考虑以下Python代码片段:
x = 14
for k in range(x):
x += 1
执行结束时,x
等于28。
我的问题:这个代码不应该永远循环吗?在每次迭代时,它会检查k
是否小于x
。但是,x
在for循环中递增,因此它具有更高的值用于下一次比较。
答案 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