测量小型 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
广告