@是python函数装饰器中的一个语法糖@decorator表示声明一个函数装饰器,这条声明语句中decorator通过@被声明为了函数装饰器,其作用是对紧接着定义的函数进行进一步的装饰并返回与被裝饰函数同名的函数。
@decorator用法规则:1、装饰器函数decorator需要先定义;2、当要装饰一个函数f时f需紧跟着声明语句@decorator之后,以表示f是被装饰函数;3、被装饰函数f的参数会默认传给装饰器函数中定义的封装函数这个封装函数以装饰器函数decoraotr的return语句作为标志。
@decorator的本质是把被装饰函数作为参數传递给装饰函数decorator然后通过装饰函数对f做进一步的处理,并返回与被装饰函数同名的函数;@既然是一个语法糖其自然就会有相应的python函數装饰器标准的语句映射。其映射关系如下:
上面的代码等价于下面的代码:
上面都是理论说明有点抽象,下面直接看例子就会完全奣白上面说的都是什么意思。在下面的例子中我们首先定义了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