Python timeit使用小结

 更新时间:2025年01月24日 09:06:54   作者:虾王之王  
本文主要介绍了Python timeit使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

假设您要测量代码段的执行时间。你是做什么?直到现在,我就像大多数人一样会做以下事情:

# 导入时间
start_time = time.time()
"""某些代码"""
end_time = time.time()
print(f“执行时间为:{end_time-start_time}”)

现在说我们要比较两个不同函数的执行时间,然后:

# 导入时间
def function_1(*参数):
 #做一点事
 #返回值
def function_2(*参数):
 #做一点事
 #返回值
 
#衡量function_1花费的时间
start_of_f1 = time.time()
值1 = function_1(*参数)
end_of_f1 = time.time()
print(f” function_1花费的时间是:{start_of_f1-end_of_f1}”)#function_2所花费的测量时间
start_of_f2 = time.time()
值2 = function_1(*参数)
end_of_f2 = time.time()print(f” function_1花费的时间是:{start_of_f2-end_of_f2}”)

这是大多数人衡量执行时间并比较两个功能的方式。

但是,如果必须测量非常小的代码段所花费的时间,则此方法无法产生准确的结果。甚至在比较功能时,操作系统中发生的所有其他进程和任务都与time.time()实例混为一谈。因此比较功能时不准确。

为了解决这个问题,Python有一个timeit模块,该模块用于测量大小代码段的执行时间。在本文的此处,我们首先使用一些示例来了解python 中的timeit库。

首先,让我们看看文档中提供的概述。

在Python中的timeit

该模块提供了一种计时少量Python代码的简单方法。它既具有命令行界面又具有可调用界面。它避免了许多用于测量执行时间的常见陷阱。

这个模块有一个函数timeit.timeit(stmt = pass,setup = pass,timer = <default timer>,number = 1000000)这个函数有四个参数:

  • stmt:要测量其执行时间的代码段。
  • setup:执行stmt之前要运行的代码。通常,它用于导入一些模块或声明一些必要的变量。通过示例将更加清楚。
  • timer:这是默认的timeit.Timer对象。它有一个合理的默认值,因此我们不必做太多事情。
  • number:指定将执行stmt的次数。

它会回到执行拍摄(秒)的时间语句,指定的数十倍。

让我们看一些例子以更好地理解它。

导入时间

#此代码在stmt之前仅执行一次。
setup_code =“来自数学导入sqrt”

#此代码将按照参数'number'的指定执行
stmt_code =“ sum(sqrt(x)for范围(1,10000)中的x)”
迭代次数= 10000
时间= timeit.timeit(stmt = stmt_code,设置= setup_code,数量=迭代次数)

打印(时间)

#17.9秒
#此输出适用于代码片段的10000个版本,而不是一个单独的版本。

print(f“单次迭代的时间为{time / iterations”“)

我们所做的只是将代码作为字符串传递,并指定迭代次数给timeit.timeit函数。

现在,让我们看看一种使用该惊人库来比较两个函数的方法。

在此示例中,让我们比较两个排序函数,一个是简单的冒泡排序,另一个是Python内置的sorted()函数。在这里,我们还将看到另一个名为repeat()的timeit函数。

def bubble_sort(arr):
    对于范围内的我(len(arr)):
        对于范围(0,len(arr)-i-1)中的j:
            如果arr [j]> arr [j + 1]:
                arr [j],arr [j + 1] = arr [j +1],arr [j]
    返回arr


def make_random_array():
    来自随机进口randint

    返回[randint(-100,100)表示范围(20)中的i]


test_array = make_random_array()
'''
由于我们要确保在同一数组上测试函数,因此我们声明一个数组
在这里,稍后将在compare_functions()中调用它。
'''

def compare_functions():
    导入时间

    setup_code1 =“”“
来自__main__ import bubble_sort
从__main__导入test_array
“”
    setup_code2 =“”“
从__main__导入test_array
“”
    stmt_code1 =“ bubble_sort(test_array)”
    stmt_code2 =“ sorted(test_array)”

    times1 = timeit.repeat(stmt = stmt_code1,setup = setup_code1,number = 10000,repeat = 5)
    times2 = timeit.repeat(stmt = stmt_code2,setup = setup_code2,number = 10000,repeat = 5)
    print(f“气泡排序所花费的时间为{min(times1)}”)
    print(f“内置排序所花费的时间为{min(times2)}”)

如果__name__ ==“ __main__”:
    compare_functions()
“”
气泡排序花费的时间是0.2646727000001192
内置排序所花费的时间是0.0031973000000107277
“”

在这里,输出是列表times1和times2中的最小值。

在设置代码中,来自__main__导入气泡排序
from __main__ import arr 这将导入程序中已定义的bubble_sort函数,并导入我们在程序中先前声明的数组“ test_array”。

这将确保两个功能都在同一数组“ test_array”上进行测试。

timeit.repeat()需要一个附加参数,重复(默认值= 5)。这将返回多次重复的代码段的执行时间列表。

正如预期的那样,冒泡排序所花费的时间比内置的sorted()函数要多得多。

现在总结,让我们看看如何使用该库中的命令行界面。

从命令行作为程序调用时,使用以下形式:

python -m timeit [-n N] [-r N] [-u U] [-s S] [声明...]

这里,

-n N,执行“语句”的次数。
-r N,重复多少次
-ss,设置语句
-uu,计时器输出单位(nano,micro,mil,sec)

一些示例如下:

$ python -m timeit -s'text =“样本字符串”; char =“ g”''文本中的字符'
5000000次循环,最好是5次:每个循环0.0877微秒
$ python -m timeit -s'text =“样本字符串”; char =“ g”''text.find(char)'
1000000次循环,最好5次:每个循环0.342微秒

这结束了timeit模块的介绍。我试图涵盖所有需要知道的知识,从现在开始开始使用此模块。

这是该模块的官方文档。请看看它以了解有关此模块的更多信息。我也鼓励您在这里查看此模块的源代码。

到此这篇关于Python timeit使用小结的文章就介绍到这了,更多相关Python timeit内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解django实现自定义manage命令的扩展

    详解django实现自定义manage命令的扩展

    这篇文章主要介绍了django实现自定义manage命令的扩展,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python处理列表的部分元素的实例详解

    python处理列表的部分元素的实例详解

    在本篇文章里小编给大家整理的是一篇关于python处理列表的部分元素的实例详解内容,有兴趣的朋友们可以学习下。
    2021-09-09
  • python教程之进程和线程

    python教程之进程和线程

    这篇文章主要为大家介绍了python进程和线程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Python按要求从多个txt文本中提取指定数据的代码示例

    Python按要求从多个txt文本中提取指定数据的代码示例

    本文给大家介绍了Python如何按要求从多个txt文本中提取指定数据,遍历文件夹并从中找到文件名称符合我们需求的多个.txt格式文本文件,文中有相关的代码示例供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2023-12-12
  • Python简单实现socket信息发送与监听功能示例

    Python简单实现socket信息发送与监听功能示例

    这篇文章主要介绍了Python简单实现socket信息发送与监听功能,结合实例形式分析了Python基于socket构建客户端与服务器端通信相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • python爬虫headers设置后无效的解决方法

    python爬虫headers设置后无效的解决方法

    这篇文章主要为大家详细介绍了python爬虫headers设置后无效的解决方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • python数据分析之公交IC卡刷卡分析

    python数据分析之公交IC卡刷卡分析

    这篇文章主要介绍了python数据分析之公交IC卡,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-04-04
  • Python的Asyncore异步Socket模块及实现端口转发的例子

    Python的Asyncore异步Socket模块及实现端口转发的例子

    asyncore模块是封装过的处理socket事件的模块,采用异步的处理方式,这里我们讲来讲解Python的Asyncore异步Socket模块及实现端口转发的例子,需要的朋友可以参考下
    2016-06-06
  • Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)

    Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquot

    这篇文章主要介绍了Python3的urllib.parse常用函数,结合实例形式分析了urlencode,quote,quote_plus,unquote,unquote_plus等函数的相关使用技巧,需要的朋友可以参考下
    2016-09-09
  • 详解Django-auth-ldap 配置方法

    详解Django-auth-ldap 配置方法

    Django-auth-ldap是一个Django身份验证后端,可以针对LDAP服务进行身份验证。这篇文章主要介绍了详解Django-auth-ldap 配置方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12

最新评论