Python函数的装饰器

发布时间:2019-04-22 22:10:29编辑:auto阅读(2027)

    函数的装饰器.

    1. 装饰器

      开闭原则:

            对功能的扩展开放

            对代码的修改是封闭

        通用装饰器语法:

    def wrapper(fn):
        def inner(*args, **kwargs): # 聚合
            """在目标函数之前的内容"""
            ret = fn(*arg, **kwargs) # 打散
            """在目标函数之后的内容"""
            return ret
        return inner
    @wrapper
    def func():
        pass
    func()

     

    2. 同一个函数被多个装饰器装饰

    就近原则

    def wrapper1(fn):
        def inner(*args, **kwargs):
            print("1")
            ret = fn(*args, **kwargs)
            print("2")
            return ret
        return inner
    
    def wrapper2(fn):
        def inner(*args, **kwargs):
            print("3")
            ret = fn(*args, **kwargs)
            print("4")
            return ret
        return inner
    
    def wrapper3(fn):
        def inner(*args, **kwargs):
            print("5")
            ret = fn(*args, **kwargs)
            print("6")
            return ret
        return inner
    # 顺序 1 2 3  func 3 2 1
    @wrapper1
    @wrapper2
    @wrapper3
    def func():
        print("我是谁,我在哪")
    func()  # 1 3 5 我是谁,我在哪 6 4 2

    3. 带参数的装饰器

         

    def wrapper_out(参数):
            def wrapper(fn):
                def inner(*args, **kwargs): # 聚合
                    """在目标函数之前的内容"""
                    ret = fn(*arg, **kwargs) # 打散
                    """在目标函数之后的内容"""
                    return ret
                return inner
            return wrapper
    @wrapper_out(实参)  # 执行的时候. 先执行函数的调用然后使用返回值和前面的@组合成装饰器语法糖
    def func():
        pass

关键字