Python 裝飾器(一)

tiny丶發表於2018-09-27

Python 裝飾器(一)

首先,看一下下面三個函式,假如說我現在要加一個條件,計算每個函式所花費時間。

def add(x, y):  
    return x+y  
  
def sub(x,y):  
    return x-y  
  
def multi(x,y):  
    return x+y

如果不考慮效率,我們可以每個函式逐一新增如下:

import time  
def add(x, y):  
    t1 = time.time()  
    s =  x+y  
    time.sleep(3)  
    t2 = time.time()  
    times = str(t2 - t1)  
    print "spend : " + times + "s"  
    return s  
   
def sub(x,y):  
    return x-y  
 
def multi(x,y):  
    return x*y  
    
if __name__ == "__main__":  
    sum = add(3, 4)  
    print sum

執行結果如下:

spend : 3.0s
7

如果有很多這樣的函式,我們不可能逐一的新增,那麼下面我們該如何處理呢?
這時候就該使用python 裝飾器了!
程式碼如下:

import time  
  
def calc(fn):  
    def sum(x, y):  
        t1 = time.time()  
        s =  fn(x, y)  
        time.sleep(3)  
        t2 = time.time()  
        times = str(t2 - t1)  
        print "spend : " + times + "s"  
  return s  
    return sum  
  
@calc  
def add(x,y):  
    return x + y  
@calc  
def sub(x,y):  
    return x-y  
@calc  
def multi(x,y):  
    return x*y  
  
if __name__ == "__main__":  
    print add.__name__  
    print sub.__name__  
    print multi.__name__  
    a = add(3, 4)  
    b = sub(3,4)  
    c = multi(3,4)  
    print a,b,c

執行結果如下:

sum
sum
sum
spend : 3.0s
spend : 3.0s
spend : 3.0s
7 -1 7

通過上述程式碼引用,我們可以直觀的看出來,

裝飾器可以在不修改原有程式碼的基礎上,對已有同型別的一些函式 進行額外的補充!!

相關文章