python函数装饰器@的用法

      @是python中的一个语法糖,@decorator表示声明一个函数装饰器,这条声明语句中,decorator通过@被声明为了函数装饰器,其作用是对紧接着定义的函数进行进一步的装饰,并返回与被装饰函数同名的函数。

      @decorator用法规则:1、装饰器函数decorator需要先定义;2、当要装饰一个函数f时,f需紧跟着声明语句@decorator之后,以表示f是被装饰函数;3、被装饰函数f的参数会默认传给装饰器函数中定义的封装函数,这个封装函数以装饰器函数decoraotr的return语句作为标志。

      @decorator的本质是把被装饰函数作为参数传递给装饰函数decorator,然后通过装饰函数对f做进一步的处理,并返回与被装饰函数同名的函数;@既然是一个语法糖,其自然就会有相应的python标准的语句映射。其映射关系如下:

def decorator(args):

       pass

@decorator

def f(args):

      pass

上面的代码等价于下面的代码:

def decorator(args):

       pass

def f(args):

       pass

f=decorator(f)

      上面都是理论说明,有点抽象,下面直接看例子,就会完全明白上面说的都是什么意思。在下面的例子中,我们首先定义了dec作为装饰器函数,装饰器函数中定义了两个函数w和ww,但是dec的return语句返回的是ww,所以这里自然就会把ww作为f的封装函数,即会把f的参数传递给ww而不是w;定义好dec函数后,通过@dec语句把dec声明为装饰器函数,并紧接着定义被装饰函数f,这样f就被认为是dec的被装饰函数;这时f在被dec装饰过后,其函数的功能已经变成了ww的功能,调用f(3,4),发现输出的结果为7,而不是'I love Python!',说明f已经被dec装饰过了。

猜你喜欢

转载自blog.csdn.net/S_o_l_o_n/article/details/86157810