timeit模块最准,自动处理循环、预热和多次运行取平均;命令行测单行用python -m timeit,脚本中用timeit.timeit()分离setup与stmt,注意避开赋值、i/o等干扰项。

直接用 timeit 模块测 Python 代码执行时间最准,它自动处理循环、预热、多次运行取平均,避免手动计时误差。
用命令行快速测试单行代码
适合测简单表达式,比如比较两种写法的快慢:
- `python -m timeit "'-'.join(str(n) for n in range(100))"`
- `python -m timeit "'-'.join(map(str, range(100)))"`
会输出类似 100000 loops, best of 5: 2.34 usec per loop,数值越小越快。
在脚本里测多行或带变量的代码
用 timeit.timeit() 函数,把要测的代码和设置部分分开:
立即学习“Python免费学习笔记(深入)”;
- setup:导入模块、初始化变量(只运行一次)
- stmt:实际要测的代码(重复执行)
- number:执行次数,默认一百万次,可调小加快测试
示例:
import timeit <p>setup = "data = list(range(1000))" stmt = "sum(data)" print(timeit.timeit(stmt, setup=setup, number=100000))
测函数性能,推荐用 lambda 或字符串传入
如果函数依赖外部定义,放在 setup 里更清晰:
def my_func(x):
return x ** 2 + 2 * x + 1
<p>setup = "from <strong>main</strong> import my_func; x = 5"
stmt = "my_func(x)"
print(timeit.timeit(stmt, setup=setup, number=100000))
或者用 lambda 包一层(适合简单逻辑):
f = lambda: sum([i*i for i in range(100)]) print(timeit.timeit(f, number=10000))
注意避开常见坑
- 别在
stmt里写赋值语句(如a = ...),timeit默认不返回值,赋值本身也耗时,会干扰结果 - 避免测试含 I/O、随机数、全局状态变化的代码——结果不稳定
- 想对比多个方案?确保
setup内容一致,只变stmt - 用
repeat()替代timeit()可获得多次独立运行的时间列表,方便看波动











