裝飾器是常見的Python程式技巧,它是一個程式的語法糖,能夠讓程式變得更加簡潔漂亮。
裝飾器本身是一個函式,同時它可以用來”裝飾”另外一個函式,所以裝飾器本身是一個高階函式,也就是接受另外一個函式作為輸入的一個函式。
舉例來說,如果我們現在有一個原本的函式
def original_function():
print('原本的函式')
return 1
現在,我們想要修飾原本的函式,使得回傳值1可以加2,我們定義我們的裝飾器函式
def decorate(func):
def plus_2():
print("此函式經過修飾")
return func() + 2
return plus_2
仔細看一下這個裝飾器的程式碼,可以看到,我們先定義一個新的函式plus_2(準備用來取代原本的func),這個plus_2會先顯示此函式經過修飾,然後回傳原本函式的值加2,然後接受func作為input的decorate最後會回傳一個新的函式叫做plus_2
在python裡面,提供了一個方便的語法糖來使用裝飾器,以下兩個寫法是等價的。
#寫法一
decorate(originial_function)()
#寫法二 - 在原本的originial_function前面加@decorate
@decorate
def original_function():
print('原本的函式')
return 1
originial_function()
詳情可以觀看影片