[英]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.