Python教程之閉包和裝飾器的應用操作,高效利用時間,成就非凡

裝飾器和閉包常常為程序員們減少了很多代碼量,在Python學習中,裝飾器和閉包是常用的兩個知識點。今天,我們一塊來學習一下。

裝飾器可以實現在代碼運行期間修改函數的上下文,簡單來説就是,在不改變原函數的情況下,豐富原函數的功能;而閉包簡單來説就是,內層函數調用外層函數的變量,外層函數返回內層函數的引用。兩者也有着密不可分的關係!!!

閉包函數

閉包函數是函數嵌套、函數對象、名稱空間與作用域結合體

閉包中被內部函數引用的變量,不會因為外部函數結束而被釋放掉,而是一直存在內存中,直到內部函數被調用結束

説了這多理論,上代碼。

需求:統計下載媒體文件的時間(簡易版)

以上代碼確實實現了統計下載時間的功能,問題來了,如果我有多個類型文件下載函數,都需要統計時間呢?難道展現我們的“CV大法”?估計隔天就要被掃地出門了……

就沒有什麼辦法可以解決了嗎?當然有啦!先看代碼

以上代碼就是對裝飾器的引入,其中 time_record 就是裝飾器,download_movie 和 download_music 就是被裝飾的函數對象。

通過觀察,以上被裝飾的函數對象是沒有返回值,且沒有參數的。問題來了,假如 download_movie 等被裝飾對象是有返回值和參數,那該咋整?

不説廢話,繼續看代碼

細心如你,裝飾器定義好了,但是每次調用都特別麻煩,有沒有一種比較便捷的調用方式呢?

噹噹噹當!當然有,那就是裝飾器的語法糖,聽起來就感覺使用非常甜,咋用呢?繼續看代碼(由於之前代碼已經實現了裝飾器,這裏就不重複展示了,只實現語法糖的代碼)

裝飾器語法糖

注意:在使用時,裝飾器必須在被裝飾對象之前定義

怎麼樣?是不是感覺意猶未盡?是不是急着想自己練習一下呢?那就行動起來吧!!!

版權聲明:本文源自 網絡, 於,由 楠木軒 整理發佈,共 721 字。

轉載請註明: Python教程之閉包和裝飾器的應用操作,高效利用時間,成就非凡 - 楠木軒