python装饰器使用
根据装饰器有参/无参,函数有参/无参,组合共4种
无参装饰器 – 包装无参数函数
不需要针对参数进行处理和优化
def decorator(func): # 自定义处理逻辑 pass @decorator def foo(): pass
这样调用foo()的时候等价于
foo = decorator(foo) foo()
无参装饰器 - 包装有参函数
def decorator(func): def wrapper(*kw, **args): # 自定义处理逻辑 # func(*kw, **args) 函数调用 pass return wrapper @decorator def foo(param): pass
这样调用foo(param)的时候等价于
foo = decorator(foo) foo(param)
有参装饰器 - 包装无参函数
def decorator(args): def wrapper(func): # 自定义处理逻辑 # func() 函数调用 pass return wrapper @decorator(args) def foo(): pass
这样调用foo()的时候等价于
foo = decorator(args)(foo) foo()
有参装饰器 - 包装有参函数
def decorator(args): def wrapper(func): def inner_wrapper(*kw, **args): # 自定义处理逻辑 # func(*kw, **args) 函数调用 pass return wrapper return wrapper @decorator(args) def foo(param): pass
这样调用foo(param)的时候等价于
foo = decorator(args)(foo) foo(param)