- 为何使用装饰器
当需要增加新需求,需要对代码进行扩展时,而不修改源代码与调用方式,则使用装饰器对源代码功能进行扩展。
- 什么是装饰器
“装饰”代指为被装饰对象添加新的功能,“器”代指器具/工具,装饰器与被装饰的对象均可以是任意可调用对象。概括地讲,装饰器的作用就是在不修改被装饰对象源代码和调用方式的前提下为被装饰对象添加额外的功能。
装饰器经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景,装饰器是解决这类问题的绝佳设计,有了装饰器,就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
from functools import wraps
def outter(func):
@wraps(func) # 将原函数func的属性赋给wrapper
def wrapper(*args, **kwargs): # 引用外部作用域的变量func
res=func(*args, **kwargs)
return res
return wrapper
@outter # outter为装饰器,index为被装饰函数
def index(x, y):
print(x,y)
return 200