舉例講解python裝飾器的使用

2022-06-18 15:36:08 字數 2680 閱讀 3112

需求:領導想知道,該測試用例執行,用例的執行時間是多少,我們怎麼實現該**?

如下:想要實現下面用例的執行時間是多少,怎麼做?

def

creat_oder():

"""這個是原**,一條測試用例

"""print("

執行測試用例")

time.sleep(1)

你可能會想到,記錄開始時間,結束時間,然後計算差就行了唄,好,那我們來看看

#第一種方法在函式內去修改

import

time

defcreat_oder():

start_time=time.time() #

開始時間

print("

執行測試用例

") #

假設它是需要執行的測試用例

time.sleep(1) #

為了增加顯示效果

end_time=time.time() #

結束時間

print("

用例的執行時間是:

",end_time-start_time)

creat_oder()

分析:這樣做真的可以嗎,看起來好像是沒有錯,但是已經修改了原來的**結構,要是有其他同事也呼叫這個函式,是不是看見**被改了,想錘你。那怎麼辦?

你可能會想到,那我寫個重新寫個函式,然後呼叫這個creat_oder函式不就行了吧。好,那我們繼續看。

#第二種方法、把函式當作引數傳遞給另乙個函式

import

time

defcreat_oder():

print("

執行測試用例")

time.sleep(1)

defshow_time(func):

start_time=time.time()

func()

end_time=time.time()

print("

用例的執行時間是:

",end_time-start_time)

show_time(creat_oder)

#分析:以上的方法邏輯沒有問題,也可以實現。但是修改了函式名字.因為我們每次都需要將函式creat_oder作為乙個引數傳遞給show_time函式 、之前的執行邏輯是直接執行creat_oder函式,但是現在不得不執行show_time(creat_oder)。 假設有10個方法呼叫需要creat_oder函式去統計執行時間,那是不是得修改10處地方,很麻煩怎麼辦?

#第三種方法,裝飾器的使用(繞了這麼久就是為了講這個)

#

定義裝飾器

def show_time(func): #

func引數

def inner(): #

將需要對creat_oder增加的**寫到這裡面

start_time=time.time()

func()

end_time=time.time()

print("

用例的執行時間是:

", end_time -start_time)

return

inner

#使用裝飾器

@show_time #

語法糖@ 等價於 creat_oder=show_time(creat_oder)

defcreat_oder():

print("

執行測試用例")

time.sleep(1)

creat_oder()

分析:就是將需要增加的**寫在inner裡面,然後給它定義乙個裝飾器名字,使用的時候在原來**上加上@語法糖和裝飾器名稱,就到達了裝飾目的。

看完以上**,你應該明白了,裝飾器就是對我們原有的**進行增強,修飾的作用,就好像裝修房子一樣,不對房子的結構做改變,但是需要貼桌布,置辦家具讓房子變得更好看更舒適。

那再補充一點,這個時候,老闆又提出了要求,說需要知道這個用例的執行人是誰??怎麼做?

第四種方法、帶引數的函式裝飾器(強化)

import

time

defwho_body_run(name):

defshow_time(func):

definner():

start_time=time.time()

func()

end_time=time.time()

print("

用例的執行時間是:

", end_time -start_time)

print("

執行者是:

",name)

return

inner

return

show_time

@who_body_run(

'tom

')

defcreat_oder():

print("

執行測試用例")

time.sleep(1)

creat_oder()

#等價於who_body_run('tom')(creat_oder)()

分析:發現只需要在方法三中的**外包裹一層函式,就可以實現裝飾器的引數化。至此,老闆有要求你也不用擔心做不了了。。

Python裝飾器詳細舉例

coding utf 8 author mr.luo date 2021 2 19 15 23 def too print 豬八戒 基礎的函式呼叫操作 print 豬八戒到底是哪八戒 center 20,too a too print type a a 基本的函式引數傳遞操作 print 豬八戒到底...

Python裝飾器Decorator的使用簡析

裝飾器 decorator 裝飾器的方便在於可以在不修改原 基礎上,新增其他功能。例如,可以函式加乙個輸出函式執行時間的功能 import math import time defdisplay time func 裝飾器也就是乙個函式 def args 再來乙個函式 t1 time.time re...

python裝飾器講解筆記

公共 判斷乙個數是否是質數def is prime num if num 2 return false elif num 2 return true else for i in range 2 num if num i 0 return false return true1 不帶有裝飾器def pr...