测量小型 Python 代码片段的执行时间 (timeit)


Python 标准库中的 `timeit` 模块中的 `Timer` 类和其他便捷函数旨在提供一种机制来测量执行少量 Python 代码所需的时间。该模块具有命令行界面,并且这些函数也可以在程序内部调用。

测量执行时间最简单的方法是使用以下便捷函数:

timeit()

此函数返回 `Timer` 类的对象。它主要需要两个参数。

  • stmt − 包含有效 Python 语句的字符串,用于测量其执行时间。

  • setup − 包含 Python 语句的字符串,该语句将执行一次,主要用于初始化某些对象或变量。

这两个字符串都可以包含用分号 (;) 或换行符分隔的多个语句,并且两者都默认为 `pass` 关键字。还可以提供另一个可选参数 `number`,它表示“stmt”的执行次数。

在下面的示例中,测量了在 0-100 范围内对数字进行累加和一千次所需的时间。

import timeit
setupcode = "s = 0"
function = '''
for x in range(100):
s = s + x
'''
print (timeit.timeit(setup = setupcode, stmt = function, number = 1000))

这里一个字符串包含一个 for 循环,在循环中将 0-100 范围内的数字相加。这个字符串是 `stmt` 参数。对于加法,变量的初始化由 `setupcode` 字符串完成。`timeit()` 函数计算所需时间(以秒为单位)。

输出

0.03055878530880241

Timer 类

可以通过首先创建一个 `Timer` 对象,然后在其上执行 `timeit()` 方法来获得相同的结果。

repeat()

`Timer` 类还有一个 `repeat()` 方法,可以重复调用 `timeit()`。它返回所有调用的列表。

上面代码的面向对象版本如下:

import timeit
setupcode = "s = 0"
function = '''
for x in range(100):
s = s + x
'''
t = timeit.Timer(setup = setupcode, stmt = function)
print (t.timeit(number = 1000))
print ('calling repeat() :',t.repeat(3,1000))

输出

0.019971274194651528
calling repeat() : [0.023369810546474253, 0.020518432391765262, 0.02075439436427058]

命令行界面

如前所述,`timeit` 模块具有命令行界面。该模块本身使用 `-m` 选项在命令行中导入,用于执行 Python 脚本。以下命令行选项定义各种参数行设置和可执行代码、重复频率等。

-n N, --number = N执行“语句”的次数
-r N, --repeat = N重复计时器的次数(默认为 3)
-s S, --setup = S最初执行一次的语句(默认为 `pass`)
-v, --verbose打印原始计时结果;重复以获得更高的精度。
-h, --help打印简短的使用说明并退出

以下是前面使用的示例代码的命令行等效项:

C:\Users\acer>python -m timeit -s "s = 0" "for x in range(100): s = s + x"
10000 loops, best of 3: 22.4 usec per loop

更新于:2020年6月27日

194 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告