timeit 是 Python 内置的轻量级性能测试工具,专为精确测量小段代码执行时间设计,自动处理循环、重复运行和垃圾回收干扰,比手动用 time.time() 更可靠,适合对比不同写法的效率差异。

timeit 是 Python 内置的轻量级性能测试工具,专为精确测量小段代码执行时间而设计。它自动处理循环、重复运行、垃圾回收干扰等细节,比手动用 time.time() 更可靠,特别适合对比不同写法的效率差异。
基础用法:一行代码快速测速
最简单的方式是直接在命令行中使用:
python -m timeit "'-'.join(str(n) for n in range(100))"这会默认执行 100 万次并输出平均耗时和统计信息。注意:表达式需用引号包裹,避免 shell 解析错误。
常用参数:
立即学习“Python免费学习笔记(深入)”;
-
-n 100000:指定执行次数(不带 -r 时默认只运行一次) -
-r 5:重复整个测试 5 次,取最快的一次(推荐,减少系统波动影响) -
-s "import math":执行前先运行 setup 语句(如导入模块、初始化变量)
在脚本中调用 timeit.timeit()
适合嵌入代码中做自动化对比或单元测试:
import timeitsetup = "data = list(range(1000))"
stmt1 = "[x*2 for x in data]"
stmt2 = "list(map(lambda x: x*2, data))"
print(timeit.timeit(stmt1, setup=setup, number=100000))
print(timeit.timeit(stmt2, setup=setup, number=100000))
关键点:
-
setup中定义的变量在stmt中可直接使用 -
number是单轮执行次数,不是总次数;若需多轮取最小值,可用timeit.repeat() - 避免在
stmt中写复杂逻辑或副作用操作(如修改全局变量),否则结果不可靠
对比多个方案:用 repeat() 获取稳定结果
真实场景中建议用 repeat() 运行多轮,剔除异常值:
times = timeit.repeat(
stmt="sum(data)",
setup="data = list(range(10000))",
number=10000,
repeat=7
)
print(f"最快耗时:{min(times):.4f}s")
通常取 min(times) 而非平均值,因为最短时间更能反映代码本身性能,排除了系统抖动、GC 等外部干扰。
常见误区与注意事项
timeit 不是万能的性能分析器,用错场景容易得出误导结论:
- 不适合测长时间运行的函数(超过秒级),应改用
cProfile或line_profiler - 不要在测试中包含 I/O、网络请求、随机数生成等不确定操作
- 确保被测代码在不同轮次中行为一致(比如避免缓存效应影响,必要时在 setup 中重置状态)
- Python 版本、解释器(CPython/PyPy)、CPU 频率都会影响结果,横向对比务必保持环境一致











