Decorator 是 Python 中的一種語法糖 (Syntax Candy),在程式中添加某種語法,將複雜的步驟化繁為簡,方便程式設計使用,讓程式更簡潔且具有更好的可讀性。
在 Python 中可以把 Decorator 當作一種特殊的 function,用來把「被裝飾」的函式當作參數傳入「裝飾器」函式,再把被裝飾的函式傳回。透過這樣的方法,可以將「被裝飾」的函式加上更多功能,能重複利用許多程式碼。
而 Python 中則是使用 @
當作 Decorator 使用的符號。
def my_decorator(func):
print('裝飾器增加功能')
return func
def my_func():
print('被裝飾的函式')
new_func = my_decorator(my_func)
new_func()
輸出 :
裝飾器增加功能
被裝飾的函式
def my_decorator(func):
print('裝飾器增加功能')
return func
@my_decorator
def my_func():
print('被裝飾的函式')
my_func()
輸出 :
裝飾器增加功能
被裝飾的函式
在 Decorator 內新增一個函式 wrapper
,並把要新增的功能寫在裡面,最後回傳傳入的函式。也就是打包 新增的功能
+ 傳入的函式
成一個函式,並回傳這個函式。這樣做的差別是在宣告「被裝飾」的函式傳給 Decorator 時,不會執行到 Decorator 本身的內容,因為實際上內容被包在 wrapper 裡面。
def my_decorator(func):
def wrapper():
print('裝飾器增加功能')
return func()
return wrapper
def my_func():
print('被裝飾的函式')
new_func = my_decorator(my_func)
new_func()
加入 Decorator 的方法跟前面一樣 :
def my_decorator(func):
def wrapper():
print('裝飾器增加功能')
return func()
return wrapper
@my_decorator
def my_func():
print('被裝飾的函式')
my_func()
輸出 :