装饰器
装饰器就是闭包函数的一种应用场景,也是闭包的核心应用场景
一、什么是装饰器
装饰器即为某个对象添加新功能的一种工具,对象可以是任意可调用的对象,目前我们学习的只有函数对象
实现装饰器的方式有多种,但是前提不能修改被装饰对象的源代码以及调用方式。即开放封闭原则
开放封闭原则
开放封闭指的是对修改封闭,对扩展开放
要求在扩展新功能时不能修改源代码,不能修改调用方式。
二、装饰器的实现
装饰器分为无参装饰器和有参装饰器
无参装饰器的模板
def outer(func):
def wrapper(*args,**kwargs):
# 新功能
res = func(*args,**kwargs)
return res
return wrapper
有参装饰器的模板
def big_outer(arg):
def outer(func):
def wrapper(*args,**kwargs):
# 新功能
res = func(*args,**kwargs)
return res
return wrapper
return outer
三、装饰器的语法糖
语法糖就是更简单的书写语法,仅仅是为了简化书写
注意:函数必须先定义后使用所以使用语法糖时必须保证装饰器定义在被装饰函数之上
四、叠加多个装饰器
每个装饰器都提供了一个扩展的新功能,当我们要为同一个函数扩展多个新功能时可以为其叠加多个装饰器
执行从上到下
加载从下到上
五、装饰器补充:wraps工具
from functools import wraps
提供了一个装饰器专门用于替换被装饰函数与装饰函数的文档注释