回答思路
装饰器本身也是一个函数,其参数是被装饰的类或者函数,关键字是@
这里给出一个通用的装饰器模板,对照着代码就很容易理解:
Python:
#装饰器函数,本身也是个函数,其参数是被装饰的类或者函数(func)def decorator(func): #装饰器所做的操作 def wrapper(*args, **kwargs): return func() return wrapper #使用@关键字调用装饰器,修饰function函数@decorator def function(): print("hello, decorator")
然后依据该模板,给出一个统计函数运行时间的装饰器函数例子:
Python:
import time #定义一个装饰器,统计函数的运行时间def run_time(func): def wrapper(*args, **kwargs): start = time.time() r = func(*args, **kwargs) #这里就是待装饰的函数 print time.time() - start return r return wrapper #调用装饰器@run_time def test(n): print("特里斯丹") for i in range(n): print(i) return n
我们自己写代码的时候可能很少会写装饰器,这是因为装饰器不是必须的,就像上面打印函数运行时间的代码,我们完全可以在每个函数里记录和打印。
但是装饰器只需要写一次,就可以在很多函数上使用,这也是其优点所在:将实现特定的功能代码封装成装饰器,提高代码复用率,增强代码可读性,代码结构更加清晰