Decorator

      在〈Decorator〉中尚無留言

Decorator

上一篇的Partial function, 把函數的功能減弱, 那是否也能擴充函數的功能呢.  這就是decorator的工作了.

Decorator中文譯為裝飾器, 但如果按照字面的解譯的話, 則無法理解它的運作機制. 所以本人這裏 把它譯為 “包裝器”, 或 “擴充器” .

網路上有很多Decorator的說明, 講解的都相當的難懂, 甚至是錯誤的. 所以建議直接看本人的說明即可.

首先使用下面的代碼作為說明的範例

def wrapper(f):#包裝器
    def show():#列印函數
        print('開始執行 %s():' % f.__name__)
        print(f())#取得要列印的資料
        print('列印結束')
    return show#傳回列印的函數

def getName():
    return 'Thomas'
def getAge():
    return 18
getName=wrapper(getName)
getName()

getAge=wrapper(getAge)
getAge()

上述有二個函數, 分別是getName(), 及getAge(), 這二個函數只會傳回一個值, 並沒有列印的功能. 所以如果下達 getName(), 則不會有任何結果顯示。

def getName():
    return 'Thomas'
def getAge():
    return 18

那如果要擴充getName()及getAge()讓它們能自已列印呢(當然要擴充的不是只有列印啦, 不然直接寫成print(getName()) 不就得了嗎!). 此時我們就定義一個 wrapper(f), 把這二個函數傳進去, 然後再定義一個show()函數執行要列印的工作. 最後包裝函數把show()函數傳回

🔒 更多內容,請登入會員繼續閱讀。

立即登入

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *