成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

SunZhaopeng / 1021人閱讀

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

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

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

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

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

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

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

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

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

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

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

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裝飾器,只需要我們在原有函數(shù)的定義上方添加一行@func_status即可,其中@為裝飾器關(guān)鍵字,func_status為裝飾器名稱,當我們再調(diào)用greet("python"),它會直接輸出包含狀態(tài)打印的結(jié)果。如果要再加一個裝飾功能呢,也是很方便的,看下方代碼:

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ù)最近的裝飾功能先添加,依次向外。
到這里,差不多對裝飾器有個簡單的理解了,快去體驗體驗吧。

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/38178.html

相關(guān)文章

  • Python: 會打扮裝飾

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

    blastz 評論0 收藏0
  • Python裝飾python真正入門鑒定標準

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

    ranwu 評論0 收藏0
  • Python裝飾vs裝飾模式

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

    stackvoid 評論0 收藏0
  • Python單例模式

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

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

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

    caozhijian 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<