列表

详情


83. Python 装饰器

回答思路

装饰器本身也是一个函数,其参数是被装饰的类或者函数,关键字是@

这里给出一个通用的装饰器模板,对照着代码就很容易理解:

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

我们自己写代码的时候可能很少会写装饰器,这是因为装饰器不是必须的,就像上面打印函数运行时间的代码,我们完全可以在每个函数里记录和打印。

但是装饰器只需要写一次,就可以在很多函数上使用,这也是其优点所在:将实现特定的功能代码封装成装饰器,提高代码复用率,增强代码可读性,代码结构更加清晰

上一题