1.預備知識:函數
1 def Test01(): 2 print('------Test1----------------') 3 def Test01(): 4 print('------------Test02---------') 5 Test01() 6 # 結果爲:------------Test02---------
以下圖所示:咱們能夠將函數名理解爲變量名,將函數理解爲一個具體的變量,定義函數時,函數名與函數的關係理解爲一種賦值的關係,即就是把這個函數賦值給了對應的函數名;而在內存中一個變量只能表示或者說指向一塊內容spa
2.原理代碼示例:code
# 定義裝飾器函數 def decorate(func): def inner(): print('-------你在幹什麼?----------') func() return inner # 定義功能函數 def play(): print('-------我正在玩遊戲------------') Test = decorate(play) Test() # 執行結果爲: # -------你在幹什麼?---------- # -------我正在玩遊戲------------
經過下圖1-5步來解釋上述函數的調用過程,並引出裝飾器 blog
3.裝飾器代碼示例:遊戲
1 # 裝飾器函數 2 def decorate(func): 3 def inner(): 4 print('-------你在幹什麼?----------') 5 func() 6 return inner 7 @decorate # 等價於上圖中分析的play=decorate(play) 8 def play(): 9 print('-------我正在玩遊戲------------') 10 # 調用play函數 11 play() 12 13 # 結果爲: 14 # -------你在幹什麼?---------- 15 # -------我正在玩遊戲------------
理解:使用裝飾器咱們的目的是:在不改變原函數的狀況下,可以增長原函數的功能;本質實爲打亂原用的調用關係,將原函數指向另一個新函數,而這個新函數內部又有相應的變量來調用咱們原函數,從而在新函數中添加一些新的功能。這樣咱們在調用原函數時,就會執行這些功能,從而對原函數有一個裝飾的做用;內存