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()函數傳回
