零、无参装饰器补充(如何伪装的一模一样?)
python帮你写好了,直接用就行!
实例代码:
from functools import wraps
def outter(func):
@wraps(func)
def wrapper(*args, **kwargs):
res = func(*args, **kwargs) # res=index(1,2)
return res?
一、有参装饰器
1.1 什么是有参装饰器?
能够给wrapper传入除了func之外的参数
1.2 为什么要有有参装饰器?
因为在无参装饰器中,由于语法糖的缘故,外层函数只能接受一个参数func,而有时候wrapper有多个参数的需求
1.3 如何实现有参装饰器?
1.3.1 完全类似于无参装饰器的第二层,再在外面套一层
语法糖变为:@最外层(第三层)函数(传入的参数1,传入的参数2,…)
执行时:先执行‘’最外层(第三层)函数(传入的参数1,传入的参数2,…)‘’,得到返回值,返回值为第二层函数的内存地址,语法糖变为:@第二层函数,之后就跟无参一样了
1.4 装饰器最多三层就够了,因为第三层可以支持传入任意多的参数
1.5 有参装饰器模板
代码如下(示例):
def 有参装饰器(x,y,z):
def outter(func):
def wrapper(*args, **kwargs):
res = func(*args, **kwargs)
return res
return wrapper
return outter