裝飾一下你的Python函數吧~


Paradoxical在敲代碼的時候想知道函數的運行時間,因而寫了如下的代碼。
python

圖片


可是這樣每次都要多寫幾行代碼感受有點麻煩,有沒有簡便點的方式呢,Paradoxical請教了小哥哥?app


慘綠青年:固然有啦,python的裝飾器就能夠實現相關功能。ide


我:裝飾器是啥鴨?函數


慘綠青年:裝飾器就是爲函數添加額外功能的代碼。利用裝飾器,只需一行代碼就能夠實現計算運行時間的功能。spa


慘綠青年:在說裝飾器以前,先說下函數的相關知識。以前說過,python的一切均可以看做是對象,因此函數也看做是對象。orm

圖片


慘綠青年:函數裏面也能夠定義函數,並且能夠將裏面的函數返回。對象

圖片


慘綠青年:因此能夠定義一個外層函數,而後在裏面定義一個內層函數,在內層函數裏面編寫相關代碼便可。下面是一個簡單的裝飾器栗子,添加運行另外一個函數前打印hello的功能。blog

圖片


慘綠青年:這樣能夠不太直觀,有點難理解,它其實是這樣的。圖片

圖片


我:哦!原來是這樣,我趕忙試試~ci


在Paradoxical強大的動手能力下,一會兒就完成了。可是問題來了,要是函數有參數呢?

圖片


我:小哥哥,要是函數有參數的話該怎麼辦鴨?


慘綠青年:修改一下代碼就能夠了。

圖片


我:那個*args和**kwargs是什麼鴨?怎麼歷來沒見過?


慘綠青年:*args是不定長參數,**kwargs是關鍵字參數。此外,函數的參數還能設置默認值,稱爲默認參數。

圖片


圖片


圖片


圖片


慘綠青年:參數的順序也有規定,順序是「必需參數→默認參數→不定長參數→關鍵字參數」。這是爲了防止默認參數和關鍵字參數混淆。


慘綠青年:回到以前的裝飾器,由於不知道傳入的函數會定義什麼參數,因此傳入不定長參數和關鍵字參數便可,python會自動把獲取的參數傳進入。

圖片


我:今天的知識點好多鴨,我得多加練習才行!

相關文章
相關標籤/搜索