1. 程式人生 > >20181003:學習python裝飾器(確實有點繞)

20181003:學習python裝飾器(確實有點繞)

  • 讓我明白為什麼要用裝飾器的文章:https://www.jb51.net/article/99585.htm
    下面的程式碼是裝飾器的原型。
    最後20行的新foo最終成為包裹了第4行老foo函式的wrapper的內容,只是名字還是foo,其實和第4行的老foo完全不是同一個函式,第4行的老foo被實際包裹在這個新foo裡面了。
    通過這一轉悠,實際達到了:不修改第4行foo函式的內容和呼叫方法,卻增加了控制、檢驗或新功能的目的。雖然呼叫方法沒變(foo()),但實際執行的新foo了,當然新foo中是包含了老foo的功能的,還增加了老foo中沒有的功能。
    在這裡插入圖片描述
    下面是在原型的基礎上用裝飾器的結果,重點關注第11行的@timeit,在定義上加上這一行與上面例子中的第20行寫的foo = timeit(foo)完全等價,只是用了python專有的@樣式處理而已,千萬不要以為@有另外的魔力。除了字元輸入少了一些,沒什麼特別的。當然還有一個額外的好處:就是這樣看上去更有裝飾器的感覺。
    在這裡插入圖片描述