python高階3 python裝飾器
阿新 • • 發佈:2018-04-21
結構 %s 代碼 def class 變量 ret war code
知識內容:
1.裝飾器介紹
2.開放封閉原則
3.裝飾器的固定結構
4.帶參數的裝飾器
5.多個裝飾器裝飾一個函數
一、裝飾器介紹
1.裝飾器的定義
定義: 從本質上講裝飾器還是函數,但是它是為了來裝飾其他函數,也就是為了附加一些功能而產生的
2.裝飾器的功能及本質
功能: 在不修改原函數及其調用方式的情況下對原函數功能進行拓展
本質: 就是一個函數,也可以說是一個閉包函數
3.裝飾器的原則
(1)不能修改被裝飾的函數的源代碼
(2)不能修改被裝飾的函數的調用方式
以上兩點說白了就算裝飾器對被裝飾的函數來說是透明的,也就是被裝飾的函數中根本不知道裝飾函數的存在,
被裝飾的函數還是和原來一樣
4.一個簡單的裝飾器
1 # 統計程序運行時間的裝飾器: 2 import time 3 4 def timmer(func): 5 def warpper(*args, **kwargs): 6 start_time = time.time() 7 func() 8 stop_time = time.time() 9 print("The func run time is %s" % (stop_time-start_time)) 10 return warpper 11 12 @timmer13 def test1(): 14 time.sleep(3) 15 print("In the test1") 16 17 18 test1()
5.實現裝飾器需要的知識
實現裝飾器的知識儲備:
(1)函數即"變量"
(2)高階函數
(3)嵌套函數
高階函數 + 嵌套函數 -> 裝飾器
關於以上內容可以見我另外一篇博客,具體位置: 點這裏
二、開放封閉原則
開放封閉原則是開發中的一個重要概念,主要內容如下:
- 對擴展是開放的
- 對修改是封閉的
當然在python的開發中使用裝飾器可以很好地實現這個原則,因為裝飾器可以在不修改原函數及其調用方式的情況下對原函數功能進行拓展
三、裝飾器的固定結構
四、帶參數的裝飾器
五、多個裝飾器裝飾一個函數
python高階3 python裝飾器