Python死循環(huán)的極限PK,while True和for+ [無限迭代器],誰更猛?
2024-05-05 加入收藏
歡迎訪問Python3分鐘系列。花3分鐘時間,學(xué)習(xí)或溫習(xí)一個Python知識點。今天是第227。
今天在項目中也寫了死循環(huán)(for循環(huán)),導(dǎo)致xxxx(省略100字..),被領(lǐng)導(dǎo)罵了。
然后我一個開發(fā)同事就開始和我爭,表示他曾寫的死循環(huán)(while循環(huán))導(dǎo)致的xxxx(省略200字)比我這個猛多了。
我肯定不服啊,表示for+無限迭代器是最猛。
這就引出了今天的討論主題:while True和for _ in [無限迭代器],誰更猛?
“什么是無限迭代器?
無限迭代器是一種特殊的迭代器,它可以產(chǎn)生無限序列的元素。例如,
itertools.count
會從一個起始值開始,無限地產(chǎn)生連續(xù)的整數(shù)。
直接上代碼吧!
import time
# 測試 while True 循環(huán)的性能
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 循環(huán)與無限迭代器的性能
start_time = time.time()
for _ in iter(int, 1): # 使用 iter 創(chuàng)建一個無限迭代器
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
循環(huán)計數(shù)到10000000次來測量執(zhí)行時間。
接著,使用iter(int, 1)
創(chuàng)建一個無限迭代器,在for
循環(huán)中進行相反的計數(shù)操作直到計數(shù)器歸零,同樣測量執(zhí)行時間。
代碼運行結(jié)果
循環(huán)10,000,000次
while True 耗時: 0.5636961460113525
for loop 耗時: 0.816516637802124
循環(huán)100,000,000次
while True 耗時: 5.133043527603149
for loop 耗時: 9.265887975692749
為什么for+[無限迭代器]會執(zhí)行更慢?
迭代器開銷:在
for
循環(huán)中,使用iter(int, 1)
創(chuàng)建的無限迭代器可能引入了額外的開銷。每次迭代時,它都需要調(diào)用int
函數(shù)和進行條件判斷,這些都會增加執(zhí)行時間。循環(huán)結(jié)構(gòu)差異:
while True
循環(huán)是Python
中最基本的循環(huán)結(jié)構(gòu),可能比涉及函數(shù)調(diào)用的for循環(huán)更直接和高效。Python解釋器優(yōu)化:
Python
的解釋器可能對while True
這樣的簡單循環(huán)進行了特定的優(yōu)化,使其執(zhí)行更快。
結(jié)論
我輸了。