timeit 是 python 专为精确测量小段代码执行时间设计的内置性能测试工具。它自动处理多次运行、垃圾回收干扰和系统时钟精度等问题,比手动用 time.time() 更可靠,支持命令行调用、脚本调用、setup 隔离初始化、globals 安全传参、repeat 多次测试取最小值等特性,适用于毫秒级以下微基准测试。

timeit 是 Python 内置的轻量级性能测试工具,专为精确测量小段代码执行时间而设计。它自动处理多次运行、垃圾回收干扰、系统时钟精度等问题,比手动用 time.time() 更可靠。
基础用法:命令行与模块调用
最简单的方式是直接在终端运行:
python -m timeit -s "import math" "math.sqrt(12345)"其中 -s(setup)执行一次初始化代码,主语句重复执行并取最快几次的中位数作为结果。
在脚本中使用更灵活:
立即学习“Python免费学习笔记(深入)”;
使用模板与程序分离的方式构建,依靠专门设计的数据库操作类实现数据库存取,具有专有错误处理模块,通过 Email 实时报告数据库错误,除具有满足购物需要的全部功能外,成新商城购物系统还对购物系统体系做了丰富的扩展,全新设计的搜索功能,自定义成新商城购物系统代码功能代码已经全面优化,杜绝SQL注入漏洞前台测试用户名:admin密码:admin888后台管理员名:admin密码:admin888
import timeit
# 测单行表达式
timeit.timeit('sum([1,2,3])', number=1000000)
<h1>测多行语句(用三引号或分号)</h1><p>timeit.timeit('''x = [1,2,3]
sum(x)''', number=100000)</p><h1>指定 setup,避免重复导入开销</h1><p>timeit.timeit('os.listdir(".")',
setup='import os',
number=10000)
对比不同实现:控制变量是关键
测试多个方案时,必须确保 setup 和环境一致,否则结果不可比:
- 所有待测语句共用同一 setup 字符串(如导入、构造测试数据)
- 避免在语句中创建大对象(如
[i for i in range(1000)]),应提前放到 setup 里 - 若需变量,用
globals参数传入字典,比字符串拼接更安全清晰
示例:
data = list(range(1000))
timeit.timeit('max(data)', globals={'data': data}, number=100000)
进阶技巧:自定义重复策略与结果分析
timeit 默认运行 100 万次并返回总耗时(秒),但常需更细粒度控制:
- 用
repeat(repeat=3, number=100000)获取多次独立测试结果,便于观察波动 - 对结果取
min()更合理——排除系统抖动影响,反映最佳性能 - 结合
autorange()让 timeit 自动找到合适迭代次数(避免过短不准确、过长太慢)
典型工作流:
t = timeit.Timer('x**2', setup='x=123')
times = t.repeat(repeat=5, number=100000)
print(f'最快: {min(times):.4f}s') # 看最小值,而非平均
常见误区与注意事项
timeit 不是万能的,要注意适用边界:
- 只适合毫秒级以下的微基准测试;函数整体耗时 >100ms 应考虑用
cProfile - 不模拟真实场景(如缓存命中、内存压力),结果不能直接外推到实际应用
- 默认禁用 GC,若代码涉及大量临时对象,可加
gc.enable()到 setup 中再测 - 交互式环境(如 Jupyter)推荐用
%timeit魔法命令,它已自动优化了上下文处理










