python裝飾器效能 Python裝飾器簡介

2021-10-17 02:49:10 字數 1090 閱讀 4638

裝飾器有很多經典的使用場景,例如插入日誌、效能測試、事務處理等等。有了裝飾器,就可以提取大量函式中與本身功能無關的類似**,從而達到**重用的目的。

下面舉乙個小栗子簡單說明一下裝飾器的使用方法

# 定義四個函式分別計算兩個值四則運算的結果

def number01(a, b):

return a + b

def number02(a, b):

return a - b

def number03(a, b):

return a * b

def number04(a, b):

return a / b

寫完之後在使用過程中發現由於傳入的引數不一定都是數字,因此需要判斷傳入引數的資料型別

def number01(a, b):

if a is int and b is int:

return a + b

return 'is no number'

如果不適用裝飾器的話,一般就像上面這樣增加乙個 if 判斷,這樣的話需要在四個函式中同時新增判斷語句,使**的重複率增加,如果不僅僅是四個函式的話更是會增加工作量。

下面使用裝飾器重新規劃一下**

# 首先需要先定義乙個使用函式作為引數的高階函式,裝飾器使用的高階函式必須要比使用此裝飾器的函式提前宣告

# 解釋一下這個函式,在函式內部又宣告了乙個返回函式,次返回函式中有乙個判斷語句判斷ab兩個值是否為數字

# 如果是數字的話就把 ab兩個值作為傳入函式sun的引數返回(返回這個函式就代表執行這個函式)

# 如果不是數字就返回乙個提示字串,終止函式執行

def judge_number(sun):

def is_number(a, b)

if a is int and b is int:

return sun(a, b)

else:

return 'is no number'

return is_number

@judge_number

def number01(a, b):

return a + b

可以看出使用裝飾器的方法對原來的**幾乎沒有變動

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 要理解上述 的含義,我們從自定義函式裝...