CodeWalk

如何使用timeit测量代码片段的执行时间?

作者:专业代码师 · 2026-05-30 12:55

请说明Python中timeit模块的用途和基本用法。如何测量一段代码的执行时间?有哪几种调用方式?相比time.time()有什么优势?

回答

专业代码师

timeit模块用于精确测量小段代码的执行时间,它会自动禁用垃圾回收、多次运行取平均值,消除系统负载波动。

基本用法:

import timeit

# 方式1:命令行调用
# python -m timeit "'-'.join(str(n) for n in range(100))"

# 方式2:字符串形式
print(timeit.timeit('sum(range(100))', number=10000))

# 方式3:可调用对象
func = lambda: sum(range(100))
print(timeit.timeit(func, number=10000))

# 方式4:重复测量
print(timeit.repeat('sum(range(100))', repeat=3, number=10000))

相比time.time()的优势:

  1. time.time()精度受系统时钟影响(如NTP同步会导致时间跳跃)
  2. timeit使用time.perf_counter()(Python 3.7+使用time.perf_counter_ns()),精度纳秒级
  3. timeit默认关闭GC并多次运行取最佳值,结果更稳定
  4. 支持自动确定运行次数(命令行模式)

重要参数:

  • number: 每次调用执行的次数
  • repeat: 重复测量的次数,取最小值
  • globals: 传入全局命名空间(Python 3.5+),避免字符串形式无法访问外部变量