Python代码执行时间测量模块timeit用法解析

介绍timeit模块

Python是一种解释性的语言,每行代码都会被解释器执行,函数执行时间和性能一直是Python优化的重点之一。timeit是Python中的一个内置模块,用于测量执行代码所需的时间。

timeit模块为开发者提供了一种简单而准确地测量执行任何Python代码所需时间的方法的方法。它使用了平均值分析,通过多次执行同一段代码并取平均值,以便获得更准确的时间结果。

timeit模块的基本使用

使用timeit模块可以有两种方式,一种是在Python命令行中使用,另一种是在脚本中使用。

在Python命令行中使用

在Python命令行中使用timeit模块可以简单快捷地测量代码的执行时间。例如,我们要测量以下代码的执行时间:

def hello():

print("Hello, world.")

hello()

在Python命令行中执行以下代码:

import timeit

print(timeit.timeit("hello()", setup="from __main__ import hello"))

输出结果为:

Hello, world.

0.1778958800118952

其中timeit.timeit()函数的第一个参数是要测量的代码的字符串形式,第二个参数是要执行的代码所需的环境,此处使用了from __main__ import hello来作为环境。在这个例子中,程序输出了字符串"Hello, world.",并返回hello()函数的执行时间0.1778958800118952秒。

在脚本中使用

在Python脚本中使用timeit模块也十分简单。只需要使用timeit()函数即可。例如,我们要测量以下代码的执行时间:

import random

def quick_sort(lst):

if len(lst) < 2:

return lst

else:

pivot = lst[0]

left = [i for i in lst[1:] if i <= pivot]

right = [i for i in lst[1:] if i > pivot]

return quick_sort(left) + [pivot] + quick_sort(right)

lst = [random.randint(1, 100) for i in range(100)]

quick_sort(lst)

在脚本中执行以下代码:

import timeit

print(timeit.timeit('quick_sort(lst)', setup='from __main__ import quick_sort, lst', number=1000))

输出结果为:

0.36405857800078794

其中timeit()函数的第一个参数是要测量的代码,第二个参数是要执行的代码所需的环境,第三个参数为测试次数。

timeit模块的高级用法

timeit模块还提供了一些高级用法,其中包括repeat()和default_timer()函数的使用。

使用repeat()函数

repeat()函数用于测量多次执行代码所需时间。该函数接受一个以字符串形式表示的代码块,相对于timeit()函数需要传入一个参数作为setup参数,repeat()函数返回一个时间数组,包含了每次运行代码所需的时间。例如,以下代码将执行10次计算1+1:

import timeit

print(timeit.repeat("1+1", repeat=10))

输出结果为:

[3.49999999999898e-06, 2.2000000000276765e-06, 1.3000000000292198e-06, 1.3000000000292198e-06, 2.1000000000165858e-06, 2.300000000027944e-06, 1.300000000043587e-06, 1.0999999999987832e-06, 2.4000000000127394e-06, 1.1999999999947129e-06]

输出的数组中的每一个元素表示执行代码块的一次执行时间。

使用default_timer()

可以通过default_timer()函数,使用代表当前Python实例的最佳定时器。这些定时器为time.perf_counter(), time.process_time(), time.thread_time()之一,根据当前平台和所要测量的时间差的目的不同而有所区别。例如:

import timeit

def test():

sum = 0

for i in range(10000):

sum += i

timer = timeit.default_timer

print(timeit.timeit(test, number=10000, timer=timer))

在本例中,将timer参数设置为default_timer,表示使用当前Python实例的最佳计时器。

总结

使用timeit模块可以简单而准确地测量Python代码的执行时间,以便开发者优化代码,提高程序性能。timeit模块的基本使用十分简单,只需使用timeit()函数或timeit.timeit()函数即可。同时,使用timeit模块还可以通过repeat()函数和default_timer()函数等方法来获得更高级的应用。在开发Python应用程序时,使用timeit模块可以大大提高代码开发效率,值得开发者们深入学习和使用。

后端开发标签