1. 程式人生 > >python初級裝飾器編寫

python初級裝飾器編寫

最近專案太忙好久沒有學習python了,今天更新一下吧~~

1.什麼是python裝飾器:

  裝飾器本質上是一個python函式,它可以讓其他函式在不需要做任何程式碼變動的前提下增加額外的功能,裝飾器的返回值也是一個函式物件,它經常用於有切面的需求的場景,比如:插入日誌,效能測試,事務處理,快取,許可權校驗等場景,裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量與函式功能本身無關的雷同程式碼並繼續重用

概括的講,裝飾器的作用就是為已存在的函式或物件新增額外的功能

2.上程式碼練習初級裝飾器的寫法:

  

 1 """定義一個裝飾器"""
 2 
 3 
 4
def debug(func): 5 def wrapper(): 6 print("[debug]:enter {} ()".format(func)) 7 return func() 8 return wrapper 9 10 11 @debug 12 def say_hello(): 13 print('hello') 14 15 16 say_hello() 17 18 19 """這個debug函式其實就是一個裝飾器,他對原函式進行了包裝並返回了另外一個函式,額外添加了一些功能""" 20 21 """這是一個最簡單的裝飾器,那麼一個問題也出現了,如果被裝飾的函式需要傳入引數,那麼這個裝飾器就壞了,因為返回的函式並不能接受引數,可以修改為
22 指定裝飾器函式wrapper接受和原函式一樣的引數如: 23 """ 24 25 26 def debug2(func): 27 def wrapper(saysomething): 28 print("[debug]:enter {} ()".format(func)) 29 return func(saysomething) 30 return wrapper 31 32 33 @debug2 34 def say_hello1(saysomething): 35 print(saysomething) 36 37
38 say_hello1('哈哈哈') 39 40 41 """但是又出現了n個問題,因為有很多函式,你只管你自己的函式,別人的函式引數是什麼樣子,那麼解決方案就是python提供了可變引數 42 *args和關鍵字引數**kwargs,有了這兩個引數,裝飾器就可以用於任意目標函數了. 43 """ 44 45 46 def debug3(func): 47 def wrapper(*args,**kwargs): 48 print("[debug]:enter {} ()".format(func)) 49 print('Prepare and say...') 50 return func(*args,**kwargs) 51 return wrapper 52 53 54 @debug3 55 def say(something): 56 print('hello{}'.format(something)) 57 58 59 @debug3 60 def say1(one,two): 61 print('先說一件事:{} 再說第二件事:{}'.format(one,two)) 62 63 64 say('說一下可變引數') 65 say1('下班','吃飯') 66 67 68 69 """恭喜你至此,你已經掌握了初級的裝飾器的寫法"""

後續在深入學習裝飾器的寫法~~~