装饰器,顾名思义,就是给本身的对象加以装饰。动态的将额外的功能添加到已有的对象上。
可以理解成给礼物打包,先将礼物放在盒子里,然后包装盒子。
1 2 3 4 5 6 7 8 9 10 11
| def box(func): def _inner(): print("in box") func() return _inner
def gift(): print("I am gift")
gift = box(gift) gift()
|
执行结果:
Python在语法上对装饰器进行了支持。
下面的代码和上面的代码等价。
1 2 3 4 5 6 7 8 9 10 11
| def box(func): def _inner(): print("in box") func() return _inner
@box def gift(): print("I am gift")
gift()
|
当然,也可以加多个装饰器。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| def star(func): def inner(*args, **kwargs): print("*" * 30) func(*args, **kwargs) print("*" * 30) return inner
def percent(func): def inner(*args, **kwargs): print("%" * 30) func(*args, **kwargs) print("%" * 30) return inner
@star @percent def printer(msg): print(msg)
printer("Hello")
|
执行结果:
1 2 3 4 5
| ****************************** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Hello %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ******************************
|
更多装饰器的用法,这篇文章写的很详细。
Reference