Python装饰器
装饰器就是一个函数,它接受其它函数为参数返回一个装饰过的函数,装饰器可用于静态方法、属性(@staticmethod),在函数前后执行特定代码(比如,验证参数、给函数调用做缓存、注册回调函数、给函数打日志)
最简单的装饰器:
1 | from functools import wraps |
执行a()
的时候会分别输出b
和a
,需要注意的是,这里不加wraps也是可以的,但是如果不加wraps,那么函数就真的相当于一个新的函数了,通过内省方法获取函数的元信息等都会变成新的,而如果wraps则会消除这样的影响。在flask中如果对views函数进行了装饰,不加wraps会出现这样的错误:
AssertionError: View function mapping is overwriting an existing endpoint function: decorate
使用类作为装饰器
被装饰的函数会作为实例化参数,得到一个类实例
1 | class LoginCheck: |
应用场景:
- 日志记录与分析
- 数据验证(用户合法性校验、数据合法性校验)
- 重复使用代码