装饰器可以理解成包礼物的过程,假设我买了一辆遥控车要送给孩子,然后精心包装。那么核心功能(遥控车)没有变化,而包装盒子可以用随意自己想要的,也叫语法糖。
应用场景:装饰器能把一个核心函数保持功能不变而添加很多附属功能,比如打印日志,加测试代码,加一些共性的配置,一个函数可以用不同装饰器,一个装饰器也可以用于不同函数,空间还是蛮大的。
试试看
def decorator(func):
def _wrap():
return "deco1-" + func()
return _wrap
def decorator2(func):
def _wrap():
return "deco2-" + func()
return _wrap
@decorator
@decorator2
def func():
return "hello, world!"
print func()
输出
>>>deco1-deco2-hello, world!
和闭包一样,只不过外面那层函数传入的是函数。
两个装饰器,相当于包了两层而已,并没有改变核心函数的任何功能。