裝飾器和閉包常常為程式設計師們減少了很多程式碼量,在Python學習中,裝飾器和閉包是常用的兩個知識點。今天,我們一塊來學習一下。
裝飾器可以實現在程式碼執行期間修改函式的上下文,簡單來說就是,在不改變原函式的情況下,豐富原函式的功能;而閉包簡單來說就是,內層函式呼叫外層函式的變數,外層函式返回內層函式的引用。兩者也有著密不可分的關係!!!
閉包函式
閉包函式是函式巢狀、函式物件、名稱空間與作用域結合體
閉包中被內部函式引用的變數,不會因為外部函式結束而被釋放掉,而是一直存在記憶體中,直到內部函式被呼叫結束
說了這多理論,上程式碼。
需求:統計下載媒體檔案的時間(簡易版)
以上程式碼確實實現了統計下載時間的功能,問題來了,如果我有多個型別檔案下載函式,都需要統計時間呢?難道展現我們的“CV大法”?估計隔天就要被掃地出門了……
就沒有什麼辦法可以解決了嗎?當然有啦!先看程式碼
以上程式碼就是對裝飾器的引入,其中 time_record 就是裝飾器,download_movie 和 download_music 就是被裝飾的函式物件。
透過觀察,以上被裝飾的函式物件是沒有返回值,且沒有引數的。問題來了,假如 download_movie 等被裝飾物件是有返回值和引數,那該咋整?
不說廢話,繼續看程式碼
細心如你,裝飾器定義好了,但是每次呼叫都特別麻煩,有沒有一種比較便捷的呼叫方式呢?
噹噹噹當!當然有,那就是裝飾器的語法糖,聽起來就感覺使用非常甜,咋用呢?繼續看程式碼(由於之前程式碼已經實現了裝飾器,這裡就不重複展示了,只實現語法糖的程式碼)
裝飾器語法糖
注意:在使用時,裝飾器必須在被裝飾物件之前定義
怎麼樣?是不是感覺意猶未盡?是不是急著想自己練習一下呢?那就行動起來吧!!!