Python CLI中timeit命令输出‘best of 5’含义咨询
解释timeit输出里的"best of 5"
你完全找对了疑惑的点——这个输出的逻辑其实是timeit的多轮测试取最优机制,我给你拆解清楚:
首先,python -m timeit的执行流程不是直接跑500000次就完事,而是分两步:
- 第一步:先自动确定每一轮要重复执行目标语句多少次(这里就是你看到的
500000 loops),这个次数是timeit根据语句执行速度自动算出的,保证每一轮的总耗时不会太短也不会太长,避免误差。 - 第二步:跑5轮完整的测试(这就是
best of 5的来源),每一轮都会完整执行那500000次语句,然后计算这一轮里单次执行的平均时间。
等5轮都跑完后,timeit会从这5轮的平均时间里,挑出最小的那个值作为最终结果展示——也就是你看到的521 nsec per loop。
为什么要这么设计?
原因很简单:你的电脑不可能一直处于完全无干扰的状态——比如后台突然有个杀毒软件扫描、系统进程抢占CPU,都会让某一轮的测试耗时变长。如果只跑一轮,结果可能被这些偶然的干扰影响,不能反映代码真实的最快执行速度。
跑多轮取最优值,能最大程度排除这些临时干扰,得到更接近代码「理想最快速度」的结果——毕竟我们用timeit测性能,最关心的就是代码能跑多快,而不是被干扰后的平均速度。
额外小知识
你可以手动调整轮数和循环次数:
- 用
-r参数修改轮数,比如python -m timeit -r 10 "sum(range(5))"就会跑10轮,输出变成best of 10。 - 用
-n参数强制指定每轮的循环次数,比如python -m timeit -n 1000000 "sum(range(5))"就会每轮跑100万次。
内容的提问来源于stack exchange,提问作者user10957988
相关产品推荐
相关产品推荐

