- 装饰器顾名思义就是化妆用的,是给函数化妆用,给函数添加功能,权限校验等等,丰富已有函数的功能。
- 装饰器的装饰顺序,先装里函数近的(近水楼台先得月),但是执行顺序恰恰相反(笨鸟先飞),那调的函数执行完就回到那里去。
import time
from datetime import datetime
def makeBold(f):
print("makeBold")
def wrapped():
time.sleep(2)
print("INFO:%s"%datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
return "<b>" + f() + "</b>"
return wrapped
def makeItalic(f):
print("makeItalic")
def wrapped():
time.sleep(2)
print("INFO:%s %s" % (datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"makeItalic"))
return "<i>" + f() + "</i>"
return wrapped
@makeBold
@makeItalic # 先装近的(装饰顺序); 函数执行顺序 先执行远的
def test3():
time.sleep(2)
print("INFO:%s %s" % (datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"test3"))
return "hello world--3"
print(test3()) # 最后执行的结果是: <b><i>hello world--3</i></b>