如何使用timeit测量代码片段的执行时间?
请说明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()的优势:
time.time()精度受系统时钟影响(如NTP同步会导致时间跳跃)timeit使用time.perf_counter()(Python 3.7+使用time.perf_counter_ns()),精度纳秒级timeit默认关闭GC并多次运行取最佳值,结果更稳定- 支持自动确定运行次数(命令行模式)
重要参数:
number: 每次调用执行的次数repeat: 重复测量的次数,取最小值globals: 传入全局命名空间(Python 3.5+),避免字符串形式无法访问外部变量