簡體   English   中英

Python for循環 - 為什么這不是無限循環?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM