装饰器
本质是回调与闭包的结合,用一个装饰器装饰一个函数。
一.基本装饰器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| def decorater(fun): def deco(): print('装饰代码一') fun() print('装饰代码二') return deco @decorater
def fun1(): print('fun') fun1()
print()
def decorater1(fun): def deco(a,b): print('装饰代码一') fun(a,b) print('装饰代码二') return deco @decorater1 def fun2(a,b): print(a+b) fun2(1,2)
|
输出:
1 2 3 4 5 6 7
| 装饰代码一 fun 装饰代码二
装饰代码一 3 装饰代码二
|
二.带参装饰器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| def decorater(num): def real_decorater(fun): def wrapper(): print('装饰代码一') for i in range(num): fun() print('装饰代码二') return wrapper return real_decorater @decorater(2) def self_fun(): print('这是被装饰的函数') self_fun()
|
输出:
1 2 3 4
| 装饰代码一 这是被装饰的函数 这是被装饰的函数 装饰代码二
|
三.装饰器链
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| def decorater(fun): def deco(): print('装饰器一') fun() return deco def decorater1(fun): def deco(): print('装饰器二') fun() return deco
@decorater @decorater1 def hello(): print('hello') hello()
|
输出: