装饰器简介以及多个装饰器执行顺序
装饰器是Python用于封装函数或类的代码工具,是Python函数的高级特性之一。其主要功能是使某个函数在不需要做任何变动的前提下增加额外功能,即对某个函数进行功能”装饰“;主要作用是可以提高代码的可读性、简洁性以及扩展性,常用于后期功能升级;具体做法是将一些特定或者通用的方法写成装饰器,在待装饰函数定义前加上@+装饰器名称。
在自己编写装饰器之前,应注意以下几点:
- 装饰器本质是一个函数,可称之为函数装饰器;
- 装饰器也是一个闭包,即在非全局范围内定义的函数可以引用其外围空间中的变量;
- 装饰器以一个函数作为参数,并且返回值也是一个函数;
- 装饰器不能修改被装饰的函数代码;不能修改被装饰函数的调用方式;常见装饰器示例如下(给一个函数增加计时器功能):
执行结果如下所示:
当一个函数需要增加多个功能时,此时需给原函数注入多个装饰器。此处的重难点在于多个装饰器的函数调用顺序。以下将围绕下面这个例子展开介绍:
上面代码首先定义了两个函数(装饰器): decotator_one, decotator_two, 这两个函数实现的功能是:接收函数func作为参数然后返回创建的另一个函数inner_one或inner_two,在这两个创建的函数中分别调用被装饰函数func。紧接着定义了函数 f ,并采用上面定义的 decotator_one, decotator_two 作为装饰函数,最后再以1作为参数调用装