天天看點

Python進階之修飾器

    裝飾器是程式開發中經常會⽤到的⼀個功能,⽤好了裝飾器,開發效率如⻁ 添翼,是以這也是Python⾯試中必問的問題。

    寫代碼要遵循 開放封閉 原則,雖然在這個原則是⽤的⾯向對象開發,但是也 适⽤于函數式程式設計,簡單來說,它規定已經實作的功能代碼不允許被修改, 但可以被擴充,即:

  • 封閉:已實作的功能代碼塊
  • 開放:對擴充開發
  • 現有如下代碼塊:
    # coding = 'utf-8'
    
    def fun2():
        print('----fun2----')
    fun2()
               
    可以看出來fun2()函數是已經封裝好的,如果我們想為其添加功能,例如添加一行輸出,“修飾器執行”,如果直接修改函數内部代碼,其實是不符合規範的,并且在代碼很多的時候容易出錯,是以引入修飾器,代碼如下:
    # coding = 'utf-8'
    
    def funtion(f):
        def fun():
            print('修飾器執行')
            f()
        return fun
    
    @funtion
    def fun2():
        print('----fun2----')
    
    fun2()
               
    通過閉包,将函數位址作為參數傳遞給閉包,本來fun2指向fun2()這一函數,但是經過閉包,其先指向了fun()之後再執行本身,輸出如下:
    修飾器執行
    ----fun2----
    
    ***Repl Closed***
               
    這便是對修飾器的簡單介紹。