装饰器
1 | 装饰器是在不改变原函数的源码和调用方式的情况下,为原函数增加功能 |
1 | 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。 |
被装饰函数带参数-初级
1 | def debug(fun): |
装饰器带参数-高级
1 | 函数的闭包: |
1 | 装饰器的接口约定: |
1 | def logging(level): |
1 | def log(text): |
1 | 和两层嵌套的decorator相比,3层嵌套的效果是这样的: |
1 | 以上两种decorator的定义都没有问题,但还差最后一步。因为我们讲了函数也是对象,它有__name__等属性,但你去看经过decorator装饰之后的函数,它们的__name__已经从原来的'now'变成了'wrapper': |
基于类实现的装饰器
1 | class logging(object): |
内置装饰器
1 |