目录
1. 装饰器是什么? |
正文
装饰器是什么?
(1)在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator); |
为什么Python要引入装饰器?
(1)便于开发,便于代码复用; |
装饰器有利于解决哪些问题?
有利于解决有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景 |
装饰器常见问题
@是什么?
@是语法糖,用以精简代码 |
带参数的装饰器实现
import logging |
装饰器等效于foo = use_logging(level="warn")(foo)
foo()
运行结果如下:WARNING:root:foo is running
i am foo
用类实现装饰器
主要是依靠类内部的__call__方法
|
装饰器等效于bar = Foo(bar)
bar(1)
运行结果如下:class decorator running
bar 1
class decorator ending
多个装饰器执行顺序
def decorator_a(func): |
装饰器等效于f = decorator_b(decorator_a(f))
f(1)
运行结果如下(定义时执行顺序为由内到外,调用时执行顺序为由外到内):Get in decorator_a
Get in decorator_b
Get in inner_b
Get in inner_a
Get in f
functools.wraps有什么用?
functools.wraps能把被调用函数的元信息(__module__, __name__, __qualname__, __doc__, __annotations__)赋值给装饰器返回的函数对象
import functools |
装饰器的原理是什么?
装饰器本质是一个返回函数的高阶函数。 |