Python 装饰器的装饰顺序和执行顺序

  • 装饰器顾名思义就是化妆用的,是给函数化妆用,给函数添加功能,权限校验等等,丰富已有函数的功能。
  • 装饰器的装饰顺序,先装里函数近的(近水楼台先得月),但是执行顺序恰恰相反(笨鸟先飞),那调的函数执行完就回到那里去。
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>


发布了127 篇原创文章 · 获赞 25 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_44224529/article/details/103691227
今日推荐