這篇文章主要介紹了python中裝飾器是什么,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了耀州免費建站歡迎大家使用!合理使用裝飾器可以簡化開發(fā),并且使得代碼更加清晰。下面我們分別介紹兩種裝飾器,不帶參數(shù)的裝飾器和帶參數(shù)的裝飾器。
一、不帶參數(shù)的裝飾器
我們用一個實際的例子來引入裝飾器的概念,比如我們現(xiàn)在有一個方法A(),然后我們需要在方法A()執(zhí)行之前在終端打印"function is running",這時候我們可以在方法A()的開始部分加上下面的代碼:
print("function is running")
但是如果我們不想修改方法A()的代碼,也可以重新寫一個方法decorator(),然后把A()作為入?yún)?,代碼如下:
def decorator(fun): @functools.wraps(fun) def wrapper(*args, **kwargs): print("Method is running") return fun() return wrapper
python中的方法可以作為參數(shù)傳入另一個方法,所以當(dāng)我們執(zhí)行decorator(A)的時候,返回的是一個方法,這個方法的本質(zhì)是先執(zhí)行print語句,然后再執(zhí)行A()。
但是這樣我們的調(diào)用代碼就需要進(jìn)行修改,也就是說之前調(diào)用方法A(),現(xiàn)在的寫法是調(diào)用decorator(A)(),為了不影響調(diào)用的代碼,我們使用python的語法糖改造方法A()的代碼。
@decorator def A(): # do something
實際上只是在A()的前面加上一行@decorator,這樣在我們的調(diào)用代碼就不需要改變了。
裝飾器中的@functools.wraps(fun)是為了保證返回的方法__name__屬性和入?yún)⒎椒╢un的__name__屬性相同。
二、帶入?yún)⒌难b飾器
在上面不帶參數(shù)的裝飾器中,我們實現(xiàn)了在執(zhí)行方法A()之前打印一行固定的字符串,如果我們想要打印不同的字符串就需要用帶參數(shù)的裝飾器。實際上就是在不帶參數(shù)的裝飾器上再封裝一層即可,代碼如下:
def decorator_par(name): def decorator(fun): @functools.wraps(fun) def wrapper(*args, **kwargs): print("Method {} is running".format(name)) return fun() return wrapper return decorator
這樣我們就可以在使用裝飾器的時候設(shè)置參數(shù)name,實現(xiàn)打印不同的信息。完整的代碼如下:
import functools def decorator_par(name): def decorator(fun): @functools.wraps(fun) def wrapper(*args, **kwargs): print("Method {} is running".format(name)) return fun() return wrapper return decorator @decorator_par("A") def A(): print("I am A") @decorator_par("B") def B(): print("I am B") A() B()
執(zhí)行輸出為:
Method A is running I am A Method B is running I am B
可以看到我們在不改變方法調(diào)用代碼的情況下,實現(xiàn)了在該方法之前打印特定的信息。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享python中裝飾器是什么內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!
分享題目:python中裝飾器是什么-創(chuàng)新互聯(lián)
URL標(biāo)題:http://jinyejixie.com/article8/depiop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、關(guān)鍵詞優(yōu)化、標(biāo)簽優(yōu)化、建站公司、網(wǎng)站設(shè)計、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)