裝飾器

registry = [] # 注冊(cè)處 #registry保存被@register裝飾的函數(shù)引用

def register(func):  # 寄存器 #register的參數(shù)是一個(gè)函數(shù)
    print('running register(%s)' % func) #為了演示,顯示被裝飾的函數(shù)
    registry.append(func) #把func存入registry
    return func #返回func:必須返回函數(shù);這里返回的函數(shù)與通過(guò)參數(shù)傳入的一樣0

@register #f1和f2被@register裝飾
def f1():
    print('running f1()')

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

def f3(): #f3沒(méi)有裝飾
    print('running f3()')

def main(): #main顯示registry,然后調(diào)用f1(),f2(),f3()
    print('running main()')
    print('registry ->', registry)
    f1()
    f2()
    f3()

if __name__ == '__main__':
    main() #只有把registration.py當(dāng)做腳本運(yùn)行得到的輸出如下 


這里主要想強(qiáng)調(diào),函數(shù)裝飾器在導(dǎo)入模塊時(shí)立即執(zhí)行,
而被裝飾的函數(shù)只在明確調(diào)用時(shí)運(yùn)行。

這突出了Python程序員所說(shuō)的導(dǎo)入時(shí)和運(yùn)行時(shí)之間的區(qū)別

把registration.py當(dāng)做腳本運(yùn)行得到的輸出是

running register(<function f1 at 0x0000000002825A60>)
running register(<function f2 at 0x0000000002825AE8>)
running main()
registry -> [<function f1 at 0x0000000002825A60>, <function f2 at 0x0000000002825AE8>]
running f1()
running f2()
running f3()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 裝飾器基礎(chǔ)知識(shí) 裝飾器是可調(diào)用的對(duì)象,其參數(shù)是另一個(gè)函數(shù)(被裝飾的函數(shù))。裝飾器可能會(huì)處理被裝飾的函數(shù),然后把它返...
    凹凸曼_ebb9閱讀 660評(píng)論 1 1
  • 本文為《爬著學(xué)Python》系列第四篇文章。從本篇開(kāi)始,本專欄在順序更新的基礎(chǔ)上,會(huì)有不規(guī)則的更新。 在Pytho...
    SyPy閱讀 2,570評(píng)論 4 11
  • Python的裝飾器的英文名叫Decorator,要對(duì)一個(gè)已有的模塊做一些“修飾工作”,所謂修飾工作就是想給現(xiàn)有的...
    Spareribs閱讀 736評(píng)論 1 11
  • 裝飾器基礎(chǔ)知識(shí) 兩大特性:能把裝飾的函數(shù)替換成另一個(gè)函數(shù)裝飾器在加載模塊時(shí)(導(dǎo)入時(shí))立即執(zhí)行,而被裝飾的函數(shù)(普通...
    一塊大番薯閱讀 321評(píng)論 0 0
  • 裝飾器模式 無(wú)論何時(shí)我們想對(duì)一個(gè)對(duì)象添加額外的功能,都有下面這些不同的可選方法。 如果合理,可以直接將功能添加到對(duì)...
    英武閱讀 5,229評(píng)論 1 50

友情鏈接更多精彩內(nèi)容