欢迎访问宙启技术站
智能推送

如何在Python中使用timeit函数测试代码性能

发布时间:2023-06-25 21:12:06

Python中的timeit模块提供了一种简单而准确的方法来测量代码的执行时间,它可以帮助我们评估代码的运行效率,找到耗时较长的函数或方法,对优化程序起到很大的作用。

timeit函数使用方法:

timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)

其中,

stmt:被测代码,可以是一个字符串或一个函数对象

setup:运行代码前需要执行的代码,可选,一般用于导入模块或创建对象等操作

timer:计时器,Python默认的计时器是time.clock()

number:执行stmt的次数,默认为1000000

globals:全局命名空间,如果stmt是字符串,可以利用globals传递全局变量

下面我们来举一个例子:

在一个包含10000个整数的列表中查找特定的数,比较两种方法的运行效率

方法一:使用for循环逐个查找

def search1(lst, item):

    for i in lst:

        if i == item:

            return True

    return False

方法二:使用生成器表达式加入any函数

def search2(lst, item):

    return any(i == item for i in lst)

我们可以使用timeit函数来测试这两种方法的性能

import timeit

lst = [i for i in range(10000)]

item = 9999

# 测试方法一

result1 = timeit.timeit("search1(lst, item)", setup="from __main__ import search1, lst, item", number=1000)

print("方法一耗时:", result1)

# 测试方法二

result2 = timeit.timeit("search2(lst, item)", setup="from __main__ import search2, lst, item", number=1000)

print("方法二耗时:", result2)

运行结果:

方法一耗时: 1.5024353084716797

方法二耗时: 0.06642913818359375

可以看到,使用生成器表达式加入any函数的方式比使用for循环逐个查找耗时更少,效率更高。

timeit函数的使用技巧:

1. 尽可能把需要测试的代码写在函数中,这样可以用函数对象替代字符串来进行测试,更加方便

2. 可以使用多行字符串来写setup和stmt,使得代码更加清晰易读

3. 可以使用repeat函数进行多次测试,找到一个较为准确的平均值

4. 可以使用time.process_time()函数来测量CPU时间,避免计时器误差和其他因素的影响

综上,timeit函数是Python中非常实用的工具,可帮助我们评估代码的运行效率,优化程序性能。在使用过程中,需注意以下几点:

1. 尽量使用函数对象来传递被测代码和setup代码

2. 可以使用repeat函数进行多次测试,得到平均值

3. 可以使用time.process_time()函数来测量CPU时间,避免计时器误差和其他因素的影响