写一个装饰器来计算函数的执行时间,python函数装饰器详解

  写一个装饰器来计算函数的执行时间,python函数装饰器详解

  本文主要详细介绍Python函数运行时间的计算。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

  00-1010个人理解例子:一边计时一边调用函数。实现方法1: @ syntax sugar代码:实现结果:实现方法2:闭包代码:实现结果:实现方法1和2的区别汇总

  

目录

  Decorator:通过关闭一个函数,并将一个函数作为另一个函数参数,实现对已有函数的灵活调用。

  例如:

  首先设置一个time_master的定时器函数,用来统计一个函数运行时的时间消耗。

  然后,如果你想知道一个函数的性能,把它放到time_master函数中,每写一个新函数就运行一次。

  这相当麻烦。相当于有了一个秤,但是所有新买的食材都需要一个一个的称重,才能得出食材的重量。

  3354如果能一劳永逸地省去称重这一步就好了。

  3354比如每种食材进门,都是按秤走的。当它进来时,它也有重量数据。

  

个人理解

  

例子:调用函数的同时对函数进行计时

  

实现方法1:@语法糖

  #说到计时,就需要引入时间模块了。

  导入时间

  #定义一个用于统计函数运行时间的定时器,用func代替要统计的函数作为参数。

  def time_master(func):

  定义call_func():

  Print(计时器启动:函数开始调用:)

  start_time=time.time()

  函数()

  end_time=time.time()

  打印(“计时器结束,函数调用完成”)

  return print(f timer result returns:函数调用耗时{end_time-start_time:2f} )

  返回调用函数

  @时间_主人

  #即调用myfunc函数时,不直接调用myfunc。

  #而是将myfunc函数作为参数放入@的decorator中,然后调用decorator。

  def myfunc():

  时间.睡眠(2)

  打印(“myfunc函数运行”)

  时间.睡眠(4)

  打印(“myfunc函数运行完毕”)

  Myfunc() #调用Myfunc

  

代码:

  计时器启动:函数开始调用:

  Myfunc函数运行

  myfunc函数完成。

  计时器结束,函数调用完成。

  计时器返回:函数调用耗时6.01小时。

  

实现结果:

  可以理解为最初定义了一个myfunc函数,但是这个函数本身没有计时的功能。相反,它恰好有一个time_master函数,可以在运行子函数时为它们计时。

  所以通过重新定义myfunc=time_master(myfunc),也就是把myfunc作为myfunc函数的新定义传入time_master。

  

实现方法2:闭包

  导入时间

  def time_master(func):

  定义call_func():

  Print(计时器启动:函数开始调用:)

  start_time=time.time()

  函数()

  end_time=time.time()

  打印(“计时器结束,函数调用完成”)

  Print(f timer result returns:函数调用耗时{end_time-start_time:2f} )

  返回调用函数

  def myfunc():

  时间.睡眠(2)

  打印(“myfunc函数运行”)

  时间.睡眠(4)

  打印(“myfunc函数运行完毕”)

  myfunc=time_master(myfunc) #与实现方法1的区别在于myfunc函数是在myfunc @ decorator之前还是之后定义两次。

  myfunc()

  

代码:

  计时器启动:函数开始调用:

  Myfunc函数运行

  myfunc函数完成。

  计时器结束,函数调用完成。

  计时器返回:函数调用耗时6.01小时。

  

实现结果:

  其实实现方法1和实现方法2:没有区别。无非是在开始的时候用@time_master来指定,或者在定义myfunc之后,多走一步让myfun放入time_master来执行。

  

实现方式1和 2的差异

  本文到此为止。希望能帮到你,也希望你能多关注更多热门IT软件开发工作室的内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: