python之「裝飾器」

在python裏裝飾器python

其定義:裝飾器就是一個函數,用來裝飾其餘函數,就是給其餘函數添加功能。編程

裝飾器有兩個特色:函數

  一、裝飾器不修改被裝飾函數的源碼;spa

  二、裝飾器不鏽鋼被裝飾函數的調用方式。日誌

在編程中常常會有一些公共函數,在已經發布的程序中,爲了程序的穩定性原函數是不容許隨便修改其源代碼的,而且合做開發中也不容許修改調用方式,那麼若是要對原函數進行功能增長,怎麼辦呢?這時裝飾器解決了這個問題。code

裝飾器用到的知識:blog

  一、函數能夠做爲變量傳遞給另外一個函數utf-8

  二、函數的返回值也能夠是另外一個函數開發

裝飾器實現代碼:源碼

有一個公共函數,做用是寫日誌文件:

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')
相關文章
相關標籤/搜索