假如我們想寫一個函數(shù)稀火,用來計算其它函數(shù)的大概執(zhí)行時間翎承。代碼如下:
計算函數(shù)myfunc的運行時間
但是有個問題顾画,以后每次調(diào)用‘myfunc’處都要改為deco(myfunc)。下面我們換一種寫法:
另一種寫法
之所以要換成這種寫法是因為我們要引入裝飾器的一種語法糖寫法--”@”語法糖來精簡裝飾器的代碼:
@裝飾器寫法
其實,@deco的本質(zhì)就是myfunc = deco(myfunc),認清這點后看后面帶參數(shù)的裝飾器就很簡單了酸舍。
被裝飾的函數(shù)帶參數(shù)的情況
前面我們討論的都是被裝飾的函數(shù)本身沒有參數(shù)的情況,下面我們討論一個被裝飾函數(shù)有參數(shù)的情況:
帶參數(shù)的裝飾器的寫法
另外里初,如果我們的裝飾器也可以通過可變參數(shù)形式來支持多個擁有不同參數(shù)形式的函數(shù):
可變參數(shù)的裝飾器寫法
裝飾器的參數(shù)
到目前為止,我們裝飾器中的參數(shù)都是函數(shù)體忽舟,如果我們想給裝飾器添加其它數(shù)據(jù)類型的參數(shù)怎么辦呢双妨?
裝飾器添加參數(shù)的寫法
我們可以給裝飾器外再套一層函數(shù),就可以添加參數(shù)了