初识装饰器
装饰器:
def test(): print(123) def wrapper(func): # 装饰器函数 def inner(): print("before") func() # 执行test函数(被装饰的函数) print("after") return inner # 返回inner的内存地址 ret = wrapper(test) # 返回值为inner,则inner的内存地址赋给ret ret() # 实际调用inner函数
装饰器的作用:在不改变函数调用方式的基础上,在被装饰的函数的前、后添加功能
开放封闭原则:
- 开放:对扩展是开放的
- 封闭:对修改是封闭的
进一步了解装饰器:
- 使用"语法糖"装饰函数,使用方式:@装饰器函数名
- @装饰器函数名,要紧紧贴在被装饰函数的上面,用来修饰被装饰函数
def wrapper(func): # 装饰器函数 def inner(): print("before") ret = func() # 执行test函数(被装饰的函数) print("after") return ret # #返回被装饰函数的返回值 return inner # 返回inner的内存地址 @wrapper # 相当于执行 test = wrapper(test) def test(): print(123) return "ABC" # 通过inner()函数返回自己的返回值 ret = test() print(ret)
装饰"带参数函数"的装饰器:
def wrapper(func): # 装饰器函数 def inner(*args, **kwargs): print("before") ret = func(*args, **kwargs) # 执行test函数(被装饰的函数) print("after") return ret # #返回被装饰函数的返回值 return inner # 返回inner的内存地址 @wrapper # 相当于执行 test = wrapper(test) def test(param): print(123) return param # 通过inner()函数返回自己的返回值 ret = test("ABC") print(ret)
装饰器:
def wrapper(func): def inner(*args, **kwargs): """在被装饰函数之前要做的事""" ret = func(*args, **kwargs) """在被装饰函数之后要做的事""" return ret return inner