装饰器

作者: zhangxiaohao | 来源:发表于2019-04-07 00:16 被阅读5次

    装饰器目的是:让一个原有函数不改变代码,不改变内部逻辑,使这个函数执行前增加一些额外功能,或者执行后加一些功能。

    装饰器本质是一个嵌套函数。基本结构如下:

    def outer(func)

        def inner(*args,**kwargs)

            print('前面的功能')

            ret=func(*args,**kwargs)

            print('后面的功能')

            retunr ret

        return inner

    要把outer变成装饰器,要用@+函数名形式,即@outer放在被装饰聚函数前面。如:

    @outer

    def  f1(a,b,dic={name:hao,sex:man})

        print(a,b)

        return dic

    装饰器作用有两个:

    1、代码被解析器载入后,自动执行装饰器函数(如例子中outer函数),并将被装饰的函数名(上例中的f1)作为能参数传给装饰器函数。注意:这就是outer函数有个参数的原因(例子中outer(func)中func参数)。

    2、装饰函数将返回值重新赋值给被装饰函数,例子中:返回的是inner,它是outer的一个内嵌函数名,这样f1=inner。

    注意:因为f1可能有参数,执行f1时就执行inner,因此定义

    def  inner(*args,**kwargs),

    又因为f1也可能有返回值,因此inner中要有这样代码:

    .......

    ret=func(*args,**kwargs)

    .........

    return  ret #这句定要放在inner最后一句。

    装饰器实际上是借用面向对象的封闭开放原则,让被装饰函数保留原有功能(封闭),给它增加新的功能(开放)。

    相关文章

      网友评论

        本文标题:装饰器

        本文链接:https://www.haomeiwen.com/subject/jntjiqtx.html