Python死循环的极限PK,while True和for+ [无限迭代器],谁更猛?
2024-05-05 加入收藏
欢迎访问Python3分钟系列。花3分钟时间,学习或温习一个Python知识点。今天是第227。
今天在项目中也写了死循环(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+[无限迭代器]会执行更慢?
迭代器开销:在
for
循环中,使用iter(int, 1)
创建的无限迭代器可能引入了额外的开销。每次迭代时,它都需要调用int
函数和进行条件判断,这些都会增加执行时间。循环结构差异:
while True
循环是Python
中最基本的循环结构,可能比涉及函数调用的for循环更直接和高效。Python解释器优化:
Python
的解释器可能对while True
这样的简单循环进行了特定的优化,使其执行更快。
结论
我输了。