1. 程式人生 > >python之“裝飾器”

python之“裝飾器”

在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