Python 性能评估需用 time.perf_counter()计时、cProfile 定位函数瓶颈、line_profiler 分析逐行开销,并通过 timeit 做微基准测试,确保环境一致、数据驱动优化。

Python 代码执行效率评估,核心是准确测量运行时间、识别 性能瓶颈 ,并用合适 工具 验证优化效果。不建议凭感觉判断快慢,要靠数据说话。
用 time 模块做简单计时
适合快速验证某段代码的粗略耗时,尤其在开发调试阶段。注意避开 I /O、系统负载波动等干扰因素。
- 用 time.perf_counter() 而非time.time(),前者精度更高、不受系统时钟调整影响
- 多次运行取平均值更可靠,单次结果易受环境干扰
- 示例:测量列表推导 vs for 循环创建 10 万元素列表
用 cProfile 定位 热点 函数
当整体变慢但不知哪部分拖后腿时,cProfile 是最实用的内置分析器,能列出每个函数的调用次数、总耗时、内部耗时等关键指标。
- 直接运行:python -m cProfile your_script.py
- 关注tottime(函数自身耗时,不含子调用)和cumtime(累计耗时,含全部子调用)
- 优先优化 tottime 高且调用频繁的函数,这类往往是真正瓶颈
用 line_profiler 看逐行开销
cProfile 只能到函数级,而 line_profiler 能精确到每一行代码的执行时间和次数,特别适合分析算法逻辑密集型函数中的低效写法。
立即学习“Python 免费学习笔记(深入)”;
- 需先安装:pip install line_profiler
- 用 @profile 装饰目标函数,再通过 kernprof -l -v script.py 运行
- 常见线索:某行出现大量重复计算、未缓存的属性访问、低效字符串拼接等
注意测试环境的一致性
效率对比结果是否可信,高度依赖测试条件是否可控。同一台机器、关闭无关进程、使用相同输入规模和数据结构是基本前提。
- 避免在 Jupyter 或 IDE 中直接计时——后台服务、自动补全、变量监控都会引入额外开销
- 用 timeit 模块做微基准测试(micro-benchmark),它会自动处理循环、预热、统计偏差等问题
- 对涉及内存分配的操作(如创建大对象),可结合 memory_profiler 观察内存增长模式