如何写一个Python万能装饰器,既可以装饰有参数的方法,也可以装饰无参数方法,或者有无返回值都可以装饰
生活随笔
收集整理的這篇文章主要介紹了
如何写一个Python万能装饰器,既可以装饰有参数的方法,也可以装饰无参数方法,或者有无返回值都可以装饰
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
需求:定義一個(gè)裝飾器,既可以裝飾有參數(shù)的方法,又可以裝飾沒有參數(shù)的方法,既可以裝飾有返回值的方法,又可以裝飾沒有返回值的方法
代碼如下:
def decorate(test): #定義一個(gè)裝飾器函數(shù)def bold(*args,**kwargs): #*args可以接收任意多個(gè)參數(shù),**kwargs可以接受任意多個(gè)字典參數(shù)print('style="font-weight:blod"') # 替換成你自己的代碼res = test(*args,**kwargs) #這樣寫,即使被裝飾的test函數(shù)沒有參數(shù)或者沒有返回值都沒關(guān)系,不會(huì)報(bào)錯(cuò)return res #test函數(shù)有返回值就返回,沒有就返回Nonereturn bold以上的代碼就完成了python萬能裝飾器的寫法,(*args,**kwargs)可以接收任意個(gè)數(shù)任意類型的參數(shù),有沒有返回值都可以return。修改print這句話為自己想要的功能,就是自己的萬能裝飾器了。這樣一來,就可以裝飾任意的函數(shù)了。
測(cè)試一下上面的代碼:
''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' @decorate #裝飾一個(gè)沒有任何參數(shù)沒有返回值的方法 def test1():print("test1:沒有參數(shù),沒有返回值") @decorate #裝飾一個(gè)有一個(gè)參數(shù)的方法 def test2(name):print("test2:帶參數(shù)%s"%name)@decorate #裝飾一個(gè)有返回值的方法 def test3():strs = "test3:帶返回值"return strstest1() #結(jié)果為: #style="font-weight:blod" #test1:沒有參數(shù),沒有返回值test2("ss") #結(jié)果為: #style="font-weight:blod" #test2:帶參數(shù)ssa = test3() print(a) #結(jié)果為: #style="font-weight:blod" #test3:帶返回值總結(jié)
以上是生活随笔為你收集整理的如何写一个Python万能装饰器,既可以装饰有参数的方法,也可以装饰无参数方法,或者有无返回值都可以装饰的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python的filter方法实现筛选功
- 下一篇: Python生成器的用法,使用生成器灵活