python裝飾器的寫法有哪些?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
成都創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、定陶網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為定陶等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。裝飾器的示例代碼
# 定義裝飾器 def decorator(func): def inner(): # 在內(nèi)部函數(shù)里面對已有函數(shù)進(jìn)行裝飾 print('已添加登錄認(rèn)證') func() return inner def comment(): print('發(fā)表評論') # 調(diào)用裝飾器對已有函數(shù)進(jìn)行裝飾,左邊的comment=inner comment = decorator(comment) # 調(diào)用方式不變 comment()
裝飾器的語法糖寫法
如果有多個函數(shù)都需要添加登錄驗證的功能,每次都需要編寫func = decorator(func)這樣代碼對已有函數(shù)進(jìn)行裝飾,這種做法還是比較麻煩。
Python給提供了一個裝飾函數(shù)更加簡單的寫法,那就是語法糖,語法糖的書寫格式是: @裝飾器名字,通過語法糖的方式也可以完成對已有函數(shù)的裝飾。
# 定義裝飾器 def decorator(func): def inner(): # 在內(nèi)部函數(shù)里面對已有函數(shù)進(jìn)行裝飾 print('已添加登錄認(rèn)證') func() return inner @decorator # comment = decorator(comment) 裝飾器語法糖對該代碼進(jìn)行了封裝 左邊comment=inner def comment(): print('發(fā)表評論') # 調(diào)用方式不變 comment()
裝飾器的執(zhí)行時機(jī)
當(dāng)前模塊加載完成以后,裝飾器會立即執(zhí)行,對已有函數(shù)進(jìn)行裝飾。
# 定義裝飾器 def decorator(func): print('裝飾器執(zhí)行了') def inner(): # 在內(nèi)部函數(shù)里面對已有函數(shù)進(jìn)行裝飾 print('已添加登錄認(rèn)證') func() return inner @decorator # comment = decorator(comment) 裝飾器語法糖對該代碼進(jìn)行了封裝 左邊comment=inner def comment(): print('發(fā)表評論')
運行結(jié)果
裝飾器執(zhí)行了
1
裝飾器實現(xiàn)已有函數(shù)執(zhí)行時間的統(tǒng)計
import time def decorator(func): def inner(): # 獲取時間距離1970-1-1 0:0:1的時間差 begin = time.time() func() end = time.time() result = end - begin print(f'函數(shù)執(zhí)行完成耗時:{result}') return inner @decorator def work(): for i in range(10000): print(i) work()
裝飾帶有參數(shù)的函數(shù)
def decorator(func): def inner(num1, num2): print('正在努力執(zhí)行加法計算') func(num1, num2) return inner @decorator def add_num(num1, num2): result = num1 + num2 print(f'結(jié)果為:{result}') add_num(1, 2)
裝飾帶有參數(shù)、返回值的函數(shù)
def decorator(func): def inner(num1, num2): print('正在努力執(zhí)行加法計算') num = func(num1, num2) return num return inner @decorator def add_num(num1, num2): result = num1 + num2 return result result = add_num(1, 2) print(f'結(jié)果為:{result}')
類裝飾器的使用
class MyDecorator(object): def __init__(self, func): self.__func = func # 實現(xiàn)__call__方法,表示對象是一個可調(diào)用對象,可以像調(diào)用函數(shù)一樣進(jìn)行調(diào)用 def __call__(self, *args, **kwargs): # 對已有函數(shù)進(jìn)行封裝 print('馬上就有下班啦') self.__func() @MyDecorator # @MyDecorator => show = MyDecorator(show) def show(): print('快要下雪啦') # 執(zhí)行show,就相當(dāng)于執(zhí)行MyDecorator類創(chuàng)建的實例對象,show() => 對象() show()
擴(kuò)展:
函數(shù)之所以能夠調(diào)用,是因為函數(shù)內(nèi)部實現(xiàn)了 __call__ 方法
感謝各位的閱讀!看完上述內(nèi)容,你們對python裝飾器的寫法有哪些大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁題目:python裝飾器的寫法有哪些-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://jinyejixie.com/article44/ccchee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、動態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計、軟件開發(fā)、手機(jī)網(wǎng)站建設(shè)、企業(yè)建站
聲明:本網(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)
猜你還喜歡下面的內(nèi)容