Python标准库的timeit模块中的Timer类和其他便利函数旨在提供一种机制,用于测量少量Python代码执行所花费的时间。该模块具有命令行界面,也可以从程序内部调用功能。
衡量执行时间的最简单方法是使用以下便捷功能
此函数返回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