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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python使用asyncio实现异步操作的示例

    Python使用asyncio实现异步操作的示例

    本文主要介绍了Python使用asyncio实现异步操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • Python基于二分查找实现求整数平方根的方法

    Python基于二分查找实现求整数平方根的方法

    这篇文章主要介绍了Python基于二分查找实现求整数平方根的方法,涉及Python的二分查找算法与数学运算相关技巧,需要的朋友可以参考下
    2016-05-05
  • windows下python安装pip方法详解

    windows下python安装pip方法详解

    这篇文章主要介绍了windows下python安装pip方法详解,需要的朋友可以参考下
    2020-02-02
  • Python语法学习之线程的创建与常用方法详解

    Python语法学习之线程的创建与常用方法详解

    本文主要介绍了线程的使用,线程是利用进程的资源来执行业务,并且通过创建多个线程,对于资源的消耗相对来说会比较低,今天就来看一看线程的使用方法具体有哪些吧
    2022-04-04
  • python imread读取文件失败的问题及解决

    python imread读取文件失败的问题及解决

    这篇文章主要介绍了python imread读取文件失败的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • python读取excel数据绘制简单曲线图的完整步骤记录

    python读取excel数据绘制简单曲线图的完整步骤记录

    这篇文章主要给大家介绍了关于python读取excel数据绘制简单曲线图的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • python爬虫常见错误集合

    python爬虫常见错误集合

    这篇文章主要介绍了python爬虫常见错误,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 几种实用的pythonic语法实例代码

    几种实用的pythonic语法实例代码

    在我理解,Pythonic 就是很 Python 的 Python 代码。下面这篇文章主要给大家分享介绍了几种实用的pythonic语法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • Python鼠标事件及坐标获取窗口和屏幕坐标

    Python鼠标事件及坐标获取窗口和屏幕坐标

    这篇文章主要介绍了Python编程中如何通过鼠标事件及坐标获取窗口坐标和屏幕坐标的示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • PyQt5 对图片进行缩放的实例

    PyQt5 对图片进行缩放的实例

    今天小编就为大家分享一篇PyQt5 对图片进行缩放的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06

最新评论