程序员想法散文

装饰器

2019-04-07  本文已影响5人  zhangxiaohao

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

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

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最后一句。

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

上一篇 下一篇

猜你喜欢

热点阅读