Python 裝飾器(一)

2021-08-28 12:01:30 字數 1609 閱讀 2753

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

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

sumsum

spend : 3.0s

spend : 3.0s

spend : 3.0s

7 -1 7

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

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...

python裝飾器原理 Python裝飾器原理

裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...