Python Timeit 模块

2025年1月12日 | 阅读 8 分钟

在本教程中,我们将研究 Python 中用于计算 Python 程序执行时间的库。 Python 中的此类库提供了一种称为 timeit() 的方法。 timeit 模块将多次执行程序(在 Python 中)以精确估计代码执行时间。我们还可以通过计算程序执行的开始和结束时间并从中减去来计算执行时间,但此过程非常耗时。因此,我们使用 timeit() 方法来完成此操作,并且该方法还有助于计算程序执行时间。

Python 中的 Timeit() 是什么?

Python timeit() 函数是 Python 模块中用于测量给定代码段所用运行时间的方法。 Python 模块运行程序语句一百万次,并提供从代码片段集合中获得的最小时间。 Python timeit() 是一种有用的技术,有助于检查代码的性能。

为什么使用 timeit 模块?

  • 总而言之,为什么不使用简单的 time 模块呢?保存代码执行的开始时间并从中减去!然而,这种方法并不完全准确,因为可能会有一些后台进程在快速运行,这会干扰代码执行,并且您会得到小代码片段运行时间上的显著差异。
  • Timeit 会将您的代码段运行数百万次(默认值为一百万次),旨在获得代码执行时间的统计上最有效的值!
  • Timeit 易于使用,具有命令行界面,并且可调用。

那么,现在让我们开始探索这个有用的模块吧!

语法

让我们看看 timeit() 函数的语法,它接受四个参数,如下所示:

参数

  • stmt:此参数用于度量您想要的语句,默认值为“pass”。
  • setup:此参数用于设置在 stmt 参数之前应运行的代码,它也有默认值“pass”,并且此参数通常用于导入此代码所需的其他代码模块。
  • timer:此参数是一个 timeit 对象,并具有其默认值。
  • number:此参数指定数量,表示您希望运行 stmt 参数的执行次数。此参数的默认值为一百万(1000000)。
  • timeit.timeit() 函数的返回值是秒,它返回运行代码片段所需的时间(以秒为单位)。

现在我们将看到一个使用 timeit() 函数的简单示例。timeit() 函数使用 stmt 参数,该参数用于指定我们要计算其执行时间的代码片段。在此文章中,我们可以使用分号单行或三引号语句多行编写 stmt。

Python Timeit 模块示例

示例 1

下面展示了一个简单的示例。

源代码

输出

7.579999999052234e-05

上述代码的解释

  • 上述程序的运行结果是 timeit.timeit() 函数传递给代码片段的 10000 次迭代的运行时间(以秒为单位)。
  • 注意:请注意,结果是代码片段的 number 次迭代的执行时间,而不是单次迭代。对于单次迭代的执行时间,请将结果时间除以 number。
  • 程序很简单。我们所要做的就是将代码作为字符串传递给 timeit() 函数。
  • 将导入语句和其他静态代码放在 setup 参数中是明智的。

示例 2

让我们看另一个实际示例,其中我们将比较两种搜索策略:二分搜索和线性搜索。

此外,在这里我展示了另外两个功能:timeit.repeat() 函数以及调用我们程序中已定义的函数。

源代码

上述程序的运行结果是列表中 times 的最小值。

这是预期的示例输出。

输出

Linear search time: 3.3610007999999993
Binary search time: 2.5686276000000134

示例 3

源代码

输出

Program to demonstrate the timeit functions for single and multi lines code


The single line code in stmt parameters are
results = 10 * 6


The multiple codes stmt using semicolons is given as follows:
p1 = 10;q1 = 6; product = p1*q1


The multiple codes stmt using triple quotes is given as follows:
''
def area_circle():
    r1 = 3
    res1 = math.pi * r1 * r1



The time taken to run the given code statement11 which uses semicolon is:
0.0018455999999105188 secs


The time taken to run the given code statement22 which uses semicolon is:
0.004685600000016166 secs


The time taken to run the given code statement33 which uses triple quotes is:
0.08174180000003162 secs

上述生成输出的屏幕截图

Python Timeit Module

上述代码的解释

在上面的程序中,我们了解了如何使用 setup、stmt 和 number 参数以及一行或多行代码语句。要编写多行代码,我们在 statement22 中使用了分号,我们也可以使用三引号语句来编写多行,我们在 statement33 中编写了它。因此,statement33 所需的 import 语句被分配给 timeit() 函数的 setup 参数,因为这用于执行 stmt 值。之后,它在运行 number = 一百万次后返回语句的执行时间。

在 Python 中,timeit 模块提供了 timeit() 函数来计算执行时间。此 timeit() 函数具有命令行界面和可调用函数。在使用此函数之前,我们应该注意几点:我们不能随处使用此函数,这意味着它仅用于小代码片段。最好使用一些其他函数,因为 timeit() 函数会立即计算代码执行时间,但如果代码需要几秒钟才能执行呢?那么这个函数就不推荐了。正如我们所讨论的,用于计算程序执行时间的 time 模块不推荐使用,因为它需要一些后台时间,可能无法提供准确的时间。

示例 4

接下来,我们用另一个简单的例子来介绍 timeit,但首先,我们必须用“import timeit”语句导入 timeit 模块。如果不是使用上面的命令行语法,则需要此操作。

源代码

上面,我们将语句作为带引号的字符串传递给 timeit.timeit 方法,然后通过指定 number 参数来增加迭代次数。

输出

Output generated on the first time running the program:
xxxx
xxxx
0.013985199999979159
0.01543170000002192
Output generated on the second time running the program:
xxxx
xxxx
0.015419800000017858
0.01498160000005555
Output generated on the third time running the program:
xxxx
xxxx
0.014588099999969018
0.01608329999999114

第二次运行程序时生成的输出

xxxx
xxxx
0.731701587427751
0.731268815585995

第三次运行程序时生成的输出

xxxxx
xxxxx
0.724086241172824
0.725586380794246

上述代码的解释

当某个程序运行时,许多进程也在后台运行以使其可执行。 time 模块不计算后台进程的执行时间,但如果您想要精确的时间执行估计,timeit 是您应该选择的模块。

timeit 模块大约运行代码一百万次(默认值),并考虑了运行该代码段所需的最短时间。

为什么 timeit() 是衡量 Python 代码执行时间的最有效方法?

以下是我们认为 timeit() 是衡量执行时间的最有效方法的几个原因。

  • 它运行代码语句一百万次(这是默认值),并从中返回最短时间。您可以通过在 time() 函数中设置 number 参数来增加/减少一百万次。
  • 在执行测试时,time() 函数会禁用垃圾回收。
  • timeit() 内部根据您的操作系统获取精确时间。例如,它将为 Windows 操作系统使用 time.clock(),为 Mac 和 Linux 使用 time.time()。

结论

在本教程中,我们得出结论,Python 中的 timeit 模块提供了 timeit() 函数。此函数用于计算代码语句的执行时间。在本文中,我们看到了一个基本示例。此外,我们还了解了如何使用分号或三引号语句来编写单行语句和多行程序语句。

我们还看到了使用 timeit() 函数参数(如 setup、stmt 和 number)编写模型的示例。这个 timeit() 函数比 time 模块非常有用,因为它可以帮助轻松快速地计算代码的性能。这个 timeit() 函数只能用于小代码片段,因为对于较长的代码片段来说,它不太推荐,因为它返回的时间可能需要几秒钟。