装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
概括的讲,装饰器的作用就是为已经存在的函数或对象添加额外的功能。如在不改动已存在的函数情况下使用装饰器算多个函数的执行时间等功能。
为什么要用装饰器的三个原因:
# ------------------------- 函数定义 -------------------------
import functools
import time
# 定义函数装饰器
def useTime(func):
@functools.wraps(func)
def execFunc(*args, **kw):
# 定义开始时间
beginTime = time.time()
print("函数执行前: ", beginTime)
res = func(*args, **kw)
# 计算耗时
ut = time.time() - beginTime
print("函数耗时: %s 秒" % int(ut))
return res
return execFunc
# 使用函数装饰器
@useTime
def test():
time.sleep(3)
print("test func run ok")
# ------------------------- 运行 -------------------------
if __name__ == '__main__':
test()
参考链接: