python裝飾器何時(shí)執(zhí)行?

python裝飾器,使用python作為開(kāi)發(fā)的小伙伴一定不會(huì)陌生,但是有沒(méi)有思考過(guò)裝飾器的執(zhí)行原理及過(guò)程呢?下面我們來(lái)分析分析裝飾器的特性及執(zhí)行過(guò)程

裝飾器有什么特性?
1.能把被裝飾的函數(shù)替換成其它函數(shù)
這個(gè)我們經(jīng)常用到應(yīng)該都是知道的

2.裝飾器在加載模塊時(shí)立即執(zhí)行
這個(gè)特性注意的不是特別多,我們來(lái)說(shuō)一下這個(gè),先看代碼

registry = []


def register(func):
    print('running register({})'.format(func))
    registry.append(func)
    return func


@register
def f1():
    print('running f1')


@register
def f2():
    print('running f2')


def f3():
    print('running f3')

if __name__ == '__main__':
    print('running main')
    print('registry --> {}'.format(registry))
    f1()
    f2()
    f3()

結(jié)果:

running register(<function f1 at 0x10b2532f0>)
running register(<function f2 at 0x10b253620>)
running main
registry --> [<function f1 at 0x10b2532f0>, <function f2 at 0x10b253620>]
running f1
running f2
running f3

Process finished with exit code 0

從結(jié)果可以看出,裝飾器在執(zhí)行main函數(shù)之前就已經(jīng)運(yùn)行了,但是被裝飾的函數(shù)只有在調(diào)用時(shí)才能運(yùn)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容