Python死循環的極限PK,while True和for [無限迭代器],誰更猛?

2024年2月6日 34点热度 0人点赞

今天在項目中也寫了死循環(for循環),導致xxxx(省略100字..),被領導罵了。

然後我一個開發同事就開始和我爭,表示他曾寫的死循環(while循環)導致的xxxx(省略200字)比我這個猛多了。

我肯定不服啊,表示for 無限迭代器是最猛。

這就引出了今天的討論主題:while True和for _ in [無限迭代器],誰更猛?

什麼是無限迭代器?

無限迭代器是一種特殊的迭代器,它可以產生無限序列的元素。例如,itertools.count會從一個起始值開始,無限地產生連續的整數。

直接上代碼吧!

import time
# 測試 while True 循環的性能
start_time = time.time()
counter = 0
while True:
    counter  = 1
    if counter >= 10000000:
        break
end_time = time.time()
while_true_duration = end_time - start_time
# 測試 for 循環與無限迭代器的性能
start_time = time.time()
for _ in iter(int, 1):  # 使用 iter 創建一個無限迭代器
    counter -= 1
    if counter <= 0:
        break
end_time = time.time()
for_loop_duration = end_time - start_time
print(f"while True 耗時: {while_true_duration}")
print(f"for loop 耗時: {for_loop_duration}")

代碼說明

先通過while True循環計數到10000000次來測量執行時間。

接著,使用iter(int, 1)創建一個無限迭代器,在for循環中進行相反的計數操作直到計數器歸零,同樣測量執行時間。

代碼運行結果

循環10,000,000次

while True 耗時: 0.5636961460113525
for loop 耗時: 0.816516637802124

循環100,000,000次

while True 耗時: 5.133043527603149
for loop 耗時: 9.265887975692749

為什麼for [無限迭代器]會執行更慢?

  1. 迭代器開銷:在for循環中,使用iter(int, 1)創建的無限迭代器可能引入了額外的開銷。每次迭代時,它都需要調用int函數和進行條件判斷,這些都會增加執行時間。
  2. 循環結構差異:while True循環是Python中最基本的循環結構,可能比涉及函數調用的for循環更直接和高效。
  3. Python解釋器優化:Python的解釋器可能對while True這樣的簡單循環進行了特定的優化,使其執行更快。

結論

我輸了。