timeit 是 python 内置轻量级性能测试工具,专为精确测量小段代码执行时间设计,自动处理循环、多次运行及垃圾回收干扰,比 time.time() 更可靠。

timeit 是 Python 内置的轻量级性能测试工具,专为精确测量小段代码执行时间而设计。它自动处理循环、多次运行、垃圾回收干扰等问题,比手动用 time.time() 更可靠。
基础用法:一行代码快速测试
适合测试单行表达式,例如字符串操作、简单函数调用:
- 在命令行中直接运行:
python -m timeit "'hello' + 'world'" - 返回类似
10000000 loops, best of 5: 24.3 nsec per loop—— 表示在 5 轮中最快的一轮,平均每 loop 耗时 24.3 纳秒 - 支持
-n指定总循环次数,-r指定重复轮数(默认 5),例如:python -m timeit -n 100000 -r 3 "sum(range(100))"
在脚本中使用 timeit.timeit()
适合集成到项目里,测试多行逻辑或需要预设环境的代码:
- 用
setup参数导入依赖或初始化变量,避免计入耗时:import timeit<br>timeit.timeit("x.append(1)", setup="x = []", number=100000) - 更清晰的方式是传入可调用对象(推荐):
def test_append():<br> x = []<br> for i in range(100): x.append(i)<br>print(timeit.timeit(test_append, number=10000))
- 注意:函数内所有操作都计入耗时,若只想测某一步,应把初始化移到
setup或函数外
对比多个方案:用 repeat() 获取稳定结果
单次 timeit() 可能受系统波动影响,repeat() 运行多轮并返回各轮总耗时列表,便于观察稳定性:
立即学习“Python免费学习笔记(深入)”;
times = timeit.repeat("a,b = b,a", setup="a,b = 1,2", number=1000000, repeat=5)- 取最小值更合理(排除 GC、中断等干扰):
min(times) - 也可算平均值:
sum(times) / len(times)
注意事项和常见坑
timeit 很好用,但容易因忽略上下文而出错:
-
变量作用域问题:在字符串模式下,
setup中定义的变量无法被主语句直接访问(除非用global,不推荐)。优先用函数方式 - 不要测 print 或 I/O:这些操作耗时不稳定,且受终端/缓冲影响,timeit 本意是测纯计算逻辑
-
避免微优化误导:比如
"a"+"b"vsf"a{b}"在短字符串上差异极小,实际性能还取决于 Python 版本和上下文 -
大对象慎用默认参数:若
number过大导致内存暴涨,可加gc.disable()避免计时被 GC 打断(需手动恢复)











