Python代码耗时怎么测_timeit性能测试

6次阅读

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

Python代码耗时怎么测_timeit性能测试

直接用 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() 可获得多次独立运行的时间列表,方便看波动

text=ZqhQzanResources