python装饰器使用

来源:互联网 发布:java web信息管理系统 编辑:程序博客网 时间:2024/05/14 16:20

python装饰器使用

根据装饰器有参/无参,函数有参/无参,组合共4种

  1. 无参装饰器 – 包装无参数函数

    不需要针对参数进行处理和优化

    def decorator(func):    # 自定义处理逻辑    pass@decoratordef foo():    pass

    这样调用foo()的时候等价于

    foo = decorator(foo)foo()
  2. 无参装饰器 - 包装有参函数

    def decorator(func):    def wrapper(*kw, **args):        # 自定义处理逻辑        # func(*kw, **args) 函数调用        pass    return wrapper@decoratordef foo(param):    pass

    这样调用foo(param)的时候等价于

    foo = decorator(foo)foo(param)
  3. 有参装饰器 - 包装无参函数

    def decorator(args):    def wrapper(func):        # 自定义处理逻辑        # func() 函数调用        pass    return wrapper@decorator(args)def foo():    pass

    这样调用foo()的时候等价于

    foo = decorator(args)(foo)foo()
  4. 有参装饰器 - 包装有参函数

    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)