为何Python循环内/外调用print函数耗时差异大?如何优化?
耗时差异的核心原因
你看到的耗时差距本质是内存运算和IO操作的性能量级差异:
- 循环内部的
print(n)是终端IO操作,每次调用都需要触发系统调用,把数据从Python进程的内存输出到终端窗口,还涉及终端的渲染刷新。这类IO操作的耗时比纯内存里的n+=1运算要高几个数量级,100万次重复调用后,IO开销会被无限放大。 - 循环外只执行一次
print(n),IO开销可以忽略不计,程序的耗时几乎全是内存里的循环计数运算,所以速度极快。
你的两段测试代码:
第一段(循环内print):
n = 0 while(n<1000000): n+=1 print(n)
第二段(循环外print):
n = 0 while(n<1000000): n+=1 print(n)
优化方案
如果确实需要输出所有数值,又想提升性能,可以通过减少IO操作次数来优化:
批量缓存后一次性输出:先把所有要打印的内容存在内存容器(比如列表)里,最后用
join拼接后一次性打印,把100万次IO操作变成1次:n = 0 output = [] while(n<1000000): n+=1 output.append(str(n)) print('\n'.join(output))利用缓冲区减少刷新:默认
print的flush参数是False,会自动缓冲输出内容,凑够一定量才会触发一次IO。如果你的代码里手动设置了flush=True,去掉这个参数就能大幅提升速度。按需输出:如果不需要查看每一个计数,完全可以只在循环结束后打印最终结果,就像你的第二段代码那样,这是性能最优的选择。
内容的提问来源于stack exchange,提问作者user22959527
相关产品推荐
相关产品推荐

