成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python的裝飾器入門小結(jié)

SunZhaopeng / 997人閱讀

摘要:使用一年多了,一直知道有個(gè)裝飾器,很好用,試圖理解過(guò),可能由于資料找的不好,自己的悟性太差,一直沒(méi)有搞清楚,今天查了一些資料,算是理解了,現(xiàn)在簡(jiǎn)單記錄下。

使用python一年多了,一直知道python有個(gè)裝飾器,很好用,試圖理解過(guò),可能由于資料找的不好,自己的悟性太差,一直沒(méi)有搞清楚,今天查了一些資料,算是理解了,現(xiàn)在簡(jiǎn)單記錄下。
python的裝飾器本身的功能是在不改變已有函數(shù)本身的情況下給已有的函數(shù)添加新的功能,通常在日志記錄等方便比較常用,舉個(gè)簡(jiǎn)單例子,假如我有個(gè)greet函數(shù)如下:

def greet(name):
    print "hello ", name

現(xiàn)在我需要每次在運(yùn)行該函數(shù)前打印一下開(kāi)始狀態(tài),運(yùn)行結(jié)束后打印一個(gè)結(jié)束狀態(tài),可以通過(guò)如下方法實(shí)現(xiàn):

print "greet starting"
greet(name)
print "greet ending"

但是如果我要多次調(diào)用這個(gè)函數(shù),那么每次都需要在其函數(shù)的執(zhí)行前后加上打印狀態(tài)的代碼,代碼太多冗余。我們知道python中函數(shù)可以作為一個(gè)函數(shù)的參數(shù),并且可以在函數(shù)內(nèi)部返回一個(gè)函數(shù),所以我們可以修改如下:

def func_status(func):
    def wraper(name):
        print "greet starting"
        func(name)
        print "greet ending"
    return wraper

然后通過(guò)如下方法調(diào)用:

new_greet = func_status(greet)
new_greet("python")

greet = func_status(greet)
greet("python")

上述方法中,第一種調(diào)用,相當(dāng)于將greet函數(shù)的功能和打印狀態(tài)的功能結(jié)合起來(lái)生成一個(gè)新的函數(shù),然后直接調(diào)用新函數(shù);python中函數(shù)名相當(dāng)于一個(gè)引用,第二種調(diào)用是將原有函數(shù)名作為新函數(shù)的引用,那如果要實(shí)現(xiàn)多個(gè)裝飾功能,就需要不斷的這樣更改引用,這時(shí),python的裝飾器為你打開(kāi)了方便之門,看如下代碼:

def func_status(func):
    def wraper(name):
        print "greet starting"
        func(name)
        print "greet ending"
    return wraper

@func_status
def greet(name):
    print "hello ", name

greet("python")

"""
輸出如下:
greet starting
hello python
greet ending
"""

利用python裝飾器,只需要我們?cè)谠泻瘮?shù)的定義上方添加一行@func_status即可,其中@為裝飾器關(guān)鍵字,func_status為裝飾器名稱,當(dāng)我們?cè)僬{(diào)用greet("python"),它會(huì)直接輸出包含狀態(tài)打印的結(jié)果。如果要再加一個(gè)裝飾功能呢,也是很方便的,看下方代碼:

def func_status(func):
    def wraper(name):
        print "greet starting"
        func(name)
        print "greet ending"
    return wraper

def add_tag(func):
    def wraper(name):
        print "--------------"
        func(name)
        print "--------------"
    return wraper

@add_tag
@func_status
def greet(name):
    print "hello ", name

greet("python")
"""
輸出如下:
--------------
greet starting
hello python
greet ending
--------------
"""

從上面代碼也可以看出,裝飾器的添加順序是從里向外的,距離原函數(shù)最近的裝飾功能先添加,依次向外。
到這里,差不多對(duì)裝飾器有個(gè)簡(jiǎn)單的理解了,快去體驗(yàn)體驗(yàn)吧。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38178.html

相關(guān)文章

  • Python: 會(huì)打扮裝飾

    摘要:一般情況下,我們使用裝飾器提供的語(yǔ)法糖,來(lái)簡(jiǎn)化上面的寫(xiě)法像上面的情況,可以動(dòng)態(tài)修改函數(shù)或類功能的函數(shù)就是裝飾器。本文標(biāo)題為會(huì)打扮的裝飾器本文鏈接為參考資料修飾器的函數(shù)式編程中的裝飾器介紹思誠(chéng)之道裝飾器入門與提高賴明星 裝飾器 我們知道,在 Python 中,我們可以像使用變量一樣使用函數(shù): 函數(shù)可以被賦值給其他變量 函數(shù)可以被刪除 可以在函數(shù)里面再定義函數(shù) 函數(shù)可以作為參數(shù)傳遞給另外...

    blastz 評(píng)論0 收藏0
  • Python裝飾python真正入門鑒定標(biāo)準(zhǔn)

    上一篇文章:Python是動(dòng)態(tài)語(yǔ)言:動(dòng)態(tài)添加或刪除屬性、方法下一篇文章:私有化規(guī)則與屬性Property 裝飾器功能: 引入日志 函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì) 執(zhí)行函數(shù)前預(yù)備處理 執(zhí)行函數(shù)后清理功能 權(quán)限校驗(yàn) 緩存 1、無(wú)參數(shù)函數(shù)的裝飾器 實(shí)例: from time import ctime,sleep def time_fun(func): #內(nèi)部包裹函數(shù) def wrapped_...

    ranwu 評(píng)論0 收藏0
  • Python裝飾vs裝飾模式

    摘要:希望引以為戒鄭傳裝飾模式如果你了解,你肯定聽(tīng)過(guò)裝飾器模式。在面向?qū)ο笾?,裝飾模式指動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加一些功能來(lái)說(shuō),裝飾模式比生成子類更為靈活。 漫談 如果作為一個(gè)Python入門,不了解Python裝飾器也沒(méi)什么,但是如果作為一個(gè)中級(jí)Python開(kāi)發(fā)人員,如果再不對(duì)python裝飾器熟稔于心的話,那么可能并沒(méi)有量變積累到質(zhì)變。 我以前也看過(guò)很多講python 裝...

    stackvoid 評(píng)論0 收藏0
  • Python單例模式

    摘要:在中,我們可以用多種方法來(lái)實(shí)現(xiàn)單例模式使用模塊使用使用裝飾器使用元類使用模塊其實(shí),的模塊就是天然的單例模式,因?yàn)槟K在第一次導(dǎo)入時(shí),會(huì)生成文件,當(dāng)?shù)诙螌?dǎo)入時(shí),就會(huì)直接加載文件,而不會(huì)再次執(zhí)行模塊代碼。 單例模式 單例模式(Singleton Pattern)是一種常用的軟件設(shè)計(jì)模式,該模式的主要目的是確保某一個(gè)類只有一個(gè)實(shí)例存在。當(dāng)你希望在整個(gè)系統(tǒng)中,某個(gè)類只能出現(xiàn)一個(gè)實(shí)例時(shí),單例對(duì)...

    khlbat 評(píng)論0 收藏0
  • Python函數(shù)裝飾和閉包

    摘要:變量查找規(guī)則在中一個(gè)變量的查找順序是局部環(huán)境,閉包,全局,內(nèi)建閉包引用了自由變量的函數(shù)。閉包的作用閉包的最大特點(diǎn)是可以將父函數(shù)的變量與內(nèi)部函數(shù)綁定,并返回綁定變量后的函數(shù),此時(shí)即便生成閉包的環(huán)境父函數(shù)已經(jīng)釋放,閉包仍然存在。 導(dǎo)語(yǔ):本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之函數(shù)篇的重點(diǎn)知識(shí)及個(gè)人心得,打算入門Python的朋友們可以來(lái)一起學(xué)習(xí)并交流。 本文重點(diǎn): 1、掌握裝飾器的本質(zhì)、功...

    caozhijian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<