[英]Python for loop - why does this not infinite loop?
考虑以下Python代码片段:
x = 14
for k in range(x):
x += 1
在执行结束时, x
等于28。
我的问题:这段代码不应该永远循环吗? 在每次迭代时,它检查k
是否小于x
。 但是, x
在for循环中递增,因此它具有较高的值用于下一次比较。
range(x)
不是“命令”。 它创建一个范围对象,循环遍历该范围。 更改x不会更改使用它创建的所有对象。
>>> x = 2
>>> k = range(x)
>>> list(k)
[0, 1]
>>> x += 1
>>> list(k)
[0, 1]
不, range(x)
将返回带有[0,1,2,3,4,5,6,7,8,9,10,11,12,13]项的列表,这些项将被迭代。 每次循环体被评估时x的值都会发生变化,但这不会影响已经生成的列表。
换句话说,您将迭代的集合将只生成一次。
这是因为for in
循环中的python与for
(在其他语言中)相比具有不同的行为: range(x)
不是在每次迭代中执行,而是在第一次执行,然后在其元素for in
迭代。 如果你想改变代码来运行无限循环,你可以使用一段while
(在这种情况下,范围(x)是没有意义的)。
python中的for循环不是迭代器,而是迭代序列/生成器,即任何形式的iterable 。
考虑到这一点,除非迭代是无限的,否则循环将不是无限的。 序列不能是无限的,但您可以创建/使用无限生成器。 一种可能性是使用itertools.count ,它从指定的开始处以指定的间隔开始生成非结束的数字序列。
from itertools import count | for(;;) {
for i in count(0): | //An infinite block
#An infinite block | }
或者,您始终可以使用while循环来创建经典的无限循环
while True:
#An infinite block
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.