本文简介介绍一下Python装饰器的使用,包含不带参数/带参数装饰器,多装饰器。以及装饰器的应用实例——retry装饰器
1. 基本用法
1 | def decorator(func): |
执行代码
1 | ➜ ~ python test-decorator.py |
分析:
1 |
|
2. 带参数装饰器
参考4.应用(retry装饰器)
3. Python多装饰器
当python代码使用多个装饰器的时候,调用顺序是自底向上依次调用
1 | def decorator_a(func): |
执行结果
1 | ➜ ~ python test-decorator.py |
代码流程分析:
装饰器函数实际上等价于decorator_b(decorator_a(f))(3)
- 首先执行decorator_a(f),该调用改过成只是返回一个函数对象inner_b,打印出“Get in decorator_a”。
- 然后调用decorator_b(decorator_a(f)),返回一个inner_a函数对象,打印出“Get in decorator_b”
- 最后执行(3)对函数传入参数3,实现函数调用。受限要执行inner_b(),所以会打印出“Get in inner_b”
- 在执行inner_b函数内部的func()时,实际上执行的是decorator_a(f)(3),也就是inner_a(3),所以打印出“Get in inner_a”
- inner_a()函数内部调用的func()实际上就是f,所以此时打印出“Get in f”
4. 应用(retry装饰器)
retry装饰器,当遇到异常的时候,重试n次
1 | def retry(times=4): |
输出结果如下
1 | ➜ ~ python test-decorator.py |