Python中的Decorator裝飾器的使用示例
#最近在網(wǎng)上看代碼時(shí),出現(xiàn)了@???的代碼,看了好久也不知道是什么意思,經(jīng)過(guò)了解原來(lái)是裝飾器,我給大家舉個(gè)例子講解一下,幫助大家快速理解:
##大家在寫函數(shù)的時(shí)候,可能會(huì)想測(cè)試這個(gè)函數(shù)的運(yùn)行時(shí)間,如果每個(gè)函數(shù)都加一個(gè)類似于:
start=time.time() 函數(shù)主體 over=time.time() Time=over-start print(Time)
def haha(): start=time.time() for i in range(1200): if i%2==0: print('這是個(gè)偶數(shù):',i) over=time.time() print("總共花費(fèi)的時(shí)間:",over-start) haha()
這樣函數(shù)的可讀性也不高,如果要測(cè)試好幾個(gè)函數(shù)還會(huì)大量浪費(fèi)時(shí)間。
下面引入裝飾器:
1簡(jiǎn)單的裝飾器操作:
(先定義一個(gè)函數(shù)1(里面?zhèn)鬟f一個(gè)參數(shù)),然后在函數(shù)1里面再定義一個(gè)函數(shù)2負(fù)責(zé)計(jì)算時(shí)間,并在時(shí)間中間調(diào)用定義函數(shù)1的參數(shù),然后返回這個(gè)函數(shù)2):
!!!當(dāng)我們想調(diào)用裝飾器時(shí),只需@函數(shù)1的名字,放在想要使用的函數(shù)前面即可。
import time def decorator(fun): def wrapper(): t1=time.time() fun() t2=time.time() print('總共花費(fèi)的時(shí)間:',t2-t1) return wrapper @decorator def haha(): #start=time.time() for i in range(1200): if i%2==0: print('這是個(gè)偶數(shù):',i) #over=time.time() #print("總共花費(fèi)的時(shí)間:",over-start) haha()
2,裝飾器升級(jí)版(如果我們想套用的函數(shù)中,具有返回對(duì)應(yīng)的值這個(gè)功能共時(shí)使用):
例如這個(gè)函數(shù):
def haha(): a=0 #start=time.time() for i in range(1200): if i%2==0: print('這是個(gè)偶數(shù):',i) a=a+i return a
#我們?nèi)绻€用1中的裝飾器就不能返回對(duì)應(yīng)的值,這就需要改動(dòng)裝飾器:
(在裝飾器中也要把函數(shù)中定義參數(shù)的返回值給表示出來(lái),并且利用return 給返回值,輸出出來(lái))
import time def decorator1(fun): def wrapper2(): t1=time.time() result=fun() t2=time.time() print('總共花費(fèi)的時(shí)間:',t2-t1) return result return wrapper2 @decorator1 def haha(): a=0 #start=time.time() for i in range(1200): if i%2==0: print('這是個(gè)偶數(shù):',i) a=a+i return a #over=time.time() #print("總共花費(fèi)的時(shí)間:",over-start) aaa=haha() print(aaa)
可能有同學(xué)會(huì)問(wèn),為什么后面要用到aaa=haha(),
這是因?yàn)槲覀円邮芊祷刂祌esult,并將其用print()打印出來(lái)。
3,裝飾器的升級(jí)升級(jí)版(當(dāng)我們需要使用的函數(shù)haha中,不但有返回值,還有傳入的參數(shù)時(shí)使用。)
(只需要在我們的函數(shù)2和調(diào)用的函數(shù)1中的參數(shù)()里面加上關(guān)鍵字傳參*args,即可)
import time def decorator1(fun): def wrapper2(*args): t1=time.time() result=fun(*args) t2=time.time() print('總共花費(fèi)的時(shí)間:',t2-t1) return result return wrapper2 @decorator1 def haha(key): a=0 #start=time.time() for i in range(key): if i%2==0: print('這是個(gè)偶數(shù):',i) a=a+i return a #over=time.time() #print("總共花費(fèi)的時(shí)間:",over-start) aaa=haha(1200) print(aaa)
可不要忘了,調(diào)用函數(shù)haha時(shí)要傳入?yún)?shù)哦。
到此這篇關(guān)于Python中的Decorator裝飾器的使用示例的文章就介紹到這了,更多相關(guān)Python Decorator內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
自定義Django Form中choicefield下拉菜單選取數(shù)據(jù)庫(kù)內(nèi)容實(shí)例
這篇文章主要介紹了自定義Django Form中choicefield下拉菜單選取數(shù)據(jù)庫(kù)內(nèi)容實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Python數(shù)據(jù)結(jié)構(gòu)詳細(xì)
本文將詳細(xì)講解Python的數(shù)據(jù)結(jié)構(gòu),下面我們將講解Python關(guān)于關(guān)于列表更多的內(nèi)容以及del 語(yǔ)句和元組和序列等一些具體內(nèi)容,需要的下伙伴可以參考一下2021-09-09Python中time庫(kù)的使用(日期時(shí)間)
time庫(kù)是python中處理時(shí)間的標(biāo)準(zhǔn)庫(kù),這篇文章主要介紹了Python中time庫(kù)的使用(日期時(shí)間),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02Python基于easygui實(shí)現(xiàn)pdf和word轉(zhuǎn)換小程序
這篇文章主要為大家詳細(xì)介紹了Python如何基于easygui實(shí)現(xiàn)pdf和word轉(zhuǎn)換小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04python實(shí)現(xiàn)TCP文件接收發(fā)送
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)TCP文件接收發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09python3操作redis實(shí)現(xiàn)List列表實(shí)例
本文主要介紹了python3操作redis實(shí)現(xiàn)List列表實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Python?Web?App開(kāi)發(fā)Dockerfiles編寫示例
這篇文章主要為大家介紹了Python?Web?App編寫Dockerfiles的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python flashtext文本搜索和替換操作庫(kù)功能使用探索
本文將深入介紹Python flashtext庫(kù),包括其基本用法、功能特性、示例代碼以及實(shí)際應(yīng)用場(chǎng)景,以幫助大家更好地利用這個(gè)有用的工具2024-01-01tensorflow與numpy的版本兼容性問(wèn)題的解決
這篇文章主要介紹了tensorflow與numpy的版本兼容性問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01