装饰器之进阶
1.模板
无参装饰器的模板
2.原理
3.语法糖@
如果有多个装饰器,我们直接书写比较麻烦,而且重复率比较高。为了解决这个问题,Python给我们提供了一个方法,就是语法糖@。 装饰器 @outer 下面是被装饰的对象 这个@就相当于: index = outer(index) index()
4.wraps
产生的原因:装饰器装饰的并不能完美,当人们查看函数解释时,很容易发现他是被装饰的。为了解决这个问题,wraps应运而生,所以wraps又被称之为装饰器修复技术。
from functools import wraps def outter(func): @wraps(func) # 装饰器修复技术 def inner(*args,**kwargs): """ 我是inner函数 :param args: :param kwargs: :return: """ print('执行被装饰函数之前 你可以执行的操作') res = func(*args,**kwargs) print('执行被装饰函数之后 你可以执行的操作') return res return inner @outter # index = outter(最原始的index内存地址) def index(): """ 这是index函数 :return: """ pass print(index) print(help(index)) # 查看函数的注释 print(index.__name__) # 查看函数名字符串形式 index()
5.装饰器的加载顺序和执行顺序
多层装饰器的加载顺序:从下往上简介简介对你来说 多层装饰器的执行顺序:从上往下
6.多层参数器和有参装饰器
from functools import wraps def warppen(*args, **kwargs): def outer(func): @wraps(func) def inner(*args, **kwargs): print('func1') res = func(*args, **kwargs) return res return inner return outer