decorate2装饰器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了decorate2装饰器相关的知识,希望对你有一定的参考价值。

import time

def timer(func):

      def deco(arg1):

            start_time=time.time()

            func(arg1)

            stop_time=time.time()

            print("the func run time is %s"%(stop_time-start_time))

        return deco

@timer             

def test1(name)

      print("test1",name)

test1("zaizai")

首先对于这个代码,@timer意味着test1=timer(test1),因为之前定义了timer(func)这个函数,而这个函数下面的逻辑是一个新的函数,deco,并且返回了deco的内存地址,所以这意味着timer(func),deco内存地址是一样的,然后有了test1=timer(test1)之后意味着,test1,timer(func),deco的内存地址是一样的,所以test1(),deco()是一样的,而test1这个函数是带参数的,所以,test1("zaizai")是可以运行的,他会运行deco("zaizai"),然后记录开始时间,运行func("zaizai"),然后print出来。

假如两个arg1都没有,只运行test1(),这时候为什么运行不了?因为这时候其实是运行deco(),然后到func(),也就是运行test1(),而这时候没有参数,因此不能运行。

如果参数不固定怎么办,将name,改成*args,**args即可

 

以上是关于decorate2装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python装饰器

python 装饰器:装饰器实例类装饰器(装饰函数)

python 装饰器:装饰器实例类装饰器(装饰函数)

装饰器、装饰器类与类装饰器(三)

Python进阶装饰器(Decorator)

python 装饰器:装饰器实例内置装饰器