python基础知识之装饰器wrapper
装饰器的作用:
不想修改函数的调用方式但是又想在原来的函数前后添加新的功能
装饰器的原则:开放封闭原则
对扩展是开放的
对修改是封闭的
装饰器语法糖:在被修饰函数头上添加@装饰器名
1.装饰器固定模式
def werpper(func): def inner(*args,**kwargs): ret=func(*args,**kwargs) return ret return inner @werpper def dom(): print("") return "" dom()
2.完美模式
from functools import wraps def werpper(func): @wraps()#为了获取原函数信息 例如dom.__name_获取原函数名_ dom.__doc__获取原函数信息 def inner(*args,**kwargs): ret=func(*args,**kwargs) return ret return inner @werpper def dom(): print("") return "" dom()
3.带参数装饰器
from functools import wraps def demo(**kwargs): def werpper(func): @wraps()#为了获取原函数信息 例如dom.__name_获取原函数名_ dom.__doc__获取原函数信息 def inner(*args,**kwargs): ret=func(*args,**kwargs) return ret return inner @demo("任何数据类型") def dom(): print("") return "" dom()
4.多个装饰器修饰一个函数
from functools import wraps def demo2(**kwargs): def werpper(func): @wraps()#为了获取原函数信息 例如dom.__name_获取原函数名_ dom.__doc__获取原函数信息 def inner(*args,**kwargs): ret=func(*args,**kwargs) return ret return inner def demo1(**kwargs): def werpper(func): @wraps()#为了获取原函数信息 例如dom.__name_获取原函数名_ dom.__doc__获取原函数信息 def inner(*args,**kwargs): ret=func(*args,**kwargs) return ret return inner @demo2("任何数据类型") @demo1("任何数据类型") def dom(): print("") return "" dom() """执行顺序套娃形式 demo2 func()前-—> demo1 func()前——>func()——>demo1 func()后——>demo2 func()后 """