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

Python标准库的timeit模块中的Timer类和其他便利函数旨在提供一种机制,用于测量少量Python代码执行所花费的时间。该模块具有命令行界面,也可以从程序内部调用功能。

衡量执行时间的最简单方法是使用以下便捷功能

timeit()

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

  • stmt-包含有效Python语句的字符串,其执行时间将被测量。

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

这两个字符串都可以包含多个由半冒号(;)或换行符分隔的语句,并且都默认为pass关键字。可以给出另一个可选的参数编号,它表示“ 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对象,然后对其执行timeit()方法,可以获得相同的结果。

重复()

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语句最初要执行一次(默认通过)
-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