python之“裝飾器”
阿新 • • 發佈:2019-08-25
在python裡裝飾器
其定義:裝飾器就是一個函式,用來裝飾其他函式,就是給其他函式新增功能。
裝飾器有兩個特點:
1、裝飾器不修改被裝飾函式的原始碼;
2、裝飾器不鏽鋼被裝飾函式的呼叫方式。
在程式設計中經常會有一些公共函式,在已經發布的程式中,為了程式的穩定性原函式是不允許隨便修改其原始碼的,並且合作開發中也不允許修改呼叫方式,那麼如果要對原函式進行功能增加,怎麼辦呢?這時裝飾器解決了這個問題。
裝飾器用到的知識:
1、函式可以作為變數傳遞給另一個函式
2、函式的返回值也可以是另一個函式
裝飾器實現程式碼:
有一個公共函式,作用是寫日誌檔案:
1 def write_log(filenmae, msg_info): 2 f = open(filenmae, 'a+', encoding='utf-8'); 3 f.write(msg_info+'\n') 4 f.close()
如果想對這個寫日誌檔案函式增加一個寫檔案時間監控,這裡增加一個寫日誌檔案函式的裝飾器:
import time def write_log_time(func): def n_wite_log(filename,*msg_info): s_time=time.time() #引數:*msg_info 代表這個引數可傳遞也可不傳遞,例如只給檔名的日誌,內容為記錄時間 func(filename,*msg_info) e_time=time.time() print('write log file times:%s' %(e_time-s_time)) return n_wite_log
使用方法為在函式write_log前加一個@write_log_time
完整程式碼:
import time def write_log_time(func): def n_wite_log(filename,*msg_info): s_time=time.time() #引數:*msg_info 代表這個引數可傳遞也可不傳遞,例如只給檔名的日誌,內容為記錄時間 func(filename,*msg_info) e_time=time.time() print('write log file times:%s' %(e_time-s_time)) return n_wite_log @write_log_time def write_log(filenmae, msg_info): f = open(filenmae, 'a+', encoding='utf-8'); f.write(msg_info+'\n') f.close() write_log('log.txt', '記錄2')
&n