一. 基本概念与定义
1. 函数的嵌套: 在函数中嵌套一个函数
2. 闭包: 内部函数调用外部函数作为参数
3. 装饰器本质: 是一个闭包
4. 函数的开放封闭原则:
封闭 ----- 对修改是封闭的
开放------ 对扩展是开放的
二. 应用
1. 基本装饰器的固定模式:
def wrapper(f): def inner(*args, **kwargs): pass result = f(*args, **kwargs) pass return result return inner @wrapper # 等价于 func = wrapper(func) = inner() def func(): pass
2. 定义三阶装饰器: 可一键决定使用或关闭装饰器
flag = True # 打开装饰器 # flag = False # 关闭装饰器 def wrapper_out(flag): def wrapper(f): def inner(*args, **kwargs): if flag: # 当flag为真是使用装饰器 pass result = f(*args, **kwargs) pass return result else: # 当flag为假时关闭装饰器,执行原函数 result = f(*args, **kwargs) return result return inner return wrapper @wrapper_out(flag) # 等价于wrapper = wrapper_out(flag) func = wrapper(func) def func(): pass
3. 多个装饰器装饰一个函数(俄罗斯套娃)
def wrapper1(f): def inner(*args, **kwargs): print('wrapper1前') result = f(*args, **kwargs) print('wrapper1后') return result return inner def wrapper2(f): def inner(*args, **kwargs): print('wrapper2前') result = f(*args, **kwargs) print('wrapper2后') return result return inner @wrapper1 @wrapper2 def func(): print(f'主函数: {func.__name__}')