什么是装饰器呢?为什么要用装饰器呢?刚开始学习的时候还不太了解,后来搜集一些资源整理一下,如有错位请多多指教。
当我们要使用一个函数实现某种功能,但这个函数无法完全适合(比如:欠缺一些使用条件),而且原函数又不能被改变(或改变比较繁琐),装饰器就派上用场了。
使用方法:先写一个函数,该函数接受一个函数作为参数,返回一个闭包而且闭包中执行了传递进来的函数,闭包中可以在函数执行的前后添加一些内容。使用时可以直接在被装饰的函数上面加上@函数名。
示例1:简单的装饰器(无参无返回值)
说明:返回inner函数相当于装饰过后的函数func()。
示例2:复杂点的装饰器(带参有返回值)
这种装饰器具有一定的局限性,只能将带有两个参数的函数进行装饰,无法发挥装饰器强大的功能。因此,*args和**kwargs就发挥作用了。
示例3:通用的装饰器(可以将任意的函数进行装饰)
注意:*args表示的就是将实参中按照位置传值,多出来的值都给args,且以元组的方式呈现;**kwargs是一个字典,用于存放所有多出来的关键字参数。
通过上面的例子我们就知道装饰器的强大作用了吧!