裝飾器是程式開發中經常會⽤到的⼀個功能,⽤好了裝飾器,開發效率如⻁ 添翼,是以這也是Python⾯試中必問的問題。
寫代碼要遵循 開放封閉 原則,雖然在這個原則是⽤的⾯向對象開發,但是也 适⽤于函數式程式設計,簡單來說,它規定已經實作的功能代碼不允許被修改, 但可以被擴充,即:
- 封閉:已實作的功能代碼塊
- 開放:對擴充開發
- 現有如下代碼塊:
可以看出來fun2()函數是已經封裝好的,如果我們想為其添加功能,例如添加一行輸出,“修飾器執行”,如果直接修改函數内部代碼,其實是不符合規範的,并且在代碼很多的時候容易出錯,是以引入修飾器,代碼如下:# coding = 'utf-8' def fun2(): print('----fun2----') fun2()
通過閉包,将函數位址作為參數傳遞給閉包,本來fun2指向fun2()這一函數,但是經過閉包,其先指向了fun()之後再執行本身,輸出如下:# coding = 'utf-8' def funtion(f): def fun(): print('修飾器執行') f() return fun @funtion def fun2(): print('----fun2----') fun2()
這便是對修飾器的簡單介紹。修飾器執行 ----fun2---- ***Repl Closed***