装饰器的作用:原函数不改变原来的调用方式,还要在原函数上添加新的功能
开放封闭原则:
开放:对扩展是开放的
封闭:对修改是封闭的
简单的装饰器:
def wrapper(f): #装饰器 def inner(): f() return inner @wrapper #func=wrapper(func) def func(): #被装饰函数 print("xxx你好!") func()
带有返回值的装饰器:
1 def wrapper(f): #装饰器 2 def inner(): 3 ret = f() return ret 4 return inner 5 @wrapper # 语法糖 装饰器函数名 func=wrapper(func) 6 def func(): #被装饰函数 7 print("xxx你好!") return "我是返回值" 8 ret = func() print(ret)
加一个参数的装饰器
1 def wrapper(f): #装饰器 2 def inner(a): 3 f(a) 4 return inner 5 @wrapper # 语法糖 装饰器函数名 func=wrapper(func) 6 def func(a): #被装饰函数 7 print("xxx你好!",a) 8 func(1)
万能装饰器:
def wrapper(f): #装饰器 def inner(*args,**kwargs): ret = f(*args,**kwargs) return ret return inner @wrapper #func=wrapper(func) def func(): #被装饰函数 print("xxx你好!") func()
带参数的装饰器
多个装饰器应用:
1 def outer(f): 2 def inner(): 3 print('b1_before) 4 f() 5 print('b1_after) 6 return inner 7 def outer1(f): 8 def inner1(): 9 print('b2_before) 10 f() 11 print('b2_after) 12 return inner1 13 @outer1 14 @outer 15 def func(): 16 print("xxx你好美!")