一開始以為是指 design pattern,後來才發現原來是Pyhton特有的一種語法糖,其實有點合成函數的味道。
舉例來說,有一個取得商品價錢的函式:
def get_price(product_id): ... return price
但是為了慶祝聖誕節,有的商品打八折,有的商品則是大打五折
而該打幾折的程式是由另一個函式判斷:
def christmas_discount(func): discount = get_discount() def get_christmas_price(product_id): return func(product_id) * discount return get_christmas_price
這時我們可以用這兩個程式合成一個新的程式:
get_price(21) // ==> 200 get_price = christmas_discount(get_price) get_price(21) // ==> '160'
但是我們可以用 decorator語法糖「掛上」合成的函式:
@christmas_discount def get_price(product_id): ... return price get_price(21) // ==> '160'
Functional Programming vs OOP:
在OOP中也有所謂的裝飾者模式,具體的講解可以參考 良葛格的文章這裡就可以看出:原本許多在OOP需要特別實作的設計模式,在Python或JavaScript等函數式語言中都能夠很直觀、輕鬆的被實作出來。
常見的Factory模式也是一樣的道理,在JS中能夠被輕易的實作。