python自定义带参数和不带参数的装饰器

python自定义带参数和不带参数的装饰器,第1张

概述前言:首先,我们需要知道在python中的函数也是对象,是对象就可以作为参数传递,这是装饰器实现的基础。需求:定义某个方法来完成某事、现在想让该方法完成某事的同时能计算出它需要花费多少时间来完成。实现:在python中我们一般使用语法糖@来调用别人写好的装饰器,下面主要介绍自定义装

前言:首先,我们需要知道在python中的函数也是对象,是对象就可以作为参数传递,这是装饰器实现的基础。

需求:定义某个方法来完成某事、现在想让该方法完成某事的同时能计算出它需要花费多少时间来完成。

实现:在python中我们一般使用语法糖@ 来调用别人写好的装饰器 ,下面主要介绍自定义装饰器满足以上需求(带参数和不带参数)。

第一种:不带参数

#定义装饰器、不带参数def show_time(func):    def inner():        start_time=time.time()        func()   #传进来的是myWay  然后加() 相当于调用方法        end_time=time.time()        print("执行方法所需时间为:",end_time - start_time)    return inner   #这里记住返回的是引用,没有()@show_time     #这里使用自定义的装饰器   这里其实等价于 myWay=show_time(myWay)  ----》然后再myWay()def myWay():    print("------正在执行测试--------")    time.sleep(1)myWay()   #调用方法

第二种:带参数

#定义一个带参数的装饰器def test_addData(data):    def decorator(fun):        def inner():            start_time=time.time()            fun()            end_time=time.time()            print("一共费时:",end_time-start_time,f"装饰器传进来的参数:{data}")        return inner    return decorator@test_addData("我是测试用例噢")  #使用装饰器def testDemo():    print("------正在执行测试--------")    time.sleep(1)testDemo()

运行结果:

        

 

 

 总结:(1)自定义不带参数的装饰器时、一般定义两层即可。通俗的说就是定义一个函数(称为外函数)、在外函数内再定义一个函数(成为内函数),其中内函数中用到了外函数的一个临时变量(就是外函数的参数),最后外函数返回的结果是内函数的函数名(没有)

(2)定义带参数的装饰器时、一般需要我们定义三层函数、然后依次返回对象

注:以上是自定义的最简单的装饰器、可根据自己需求自行扩充。

 

总结

以上是内存溢出为你收集整理的python自定义带参数和不带参数的装饰器全部内容,希望文章能够帮你解决python自定义带参数和不带参数的装饰器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1187293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存