需求:定義一個裝飾器,既可以裝飾有參數的方法,又可以裝飾沒有參數的方法,既可以裝飾有返回值的方法,又可以裝飾沒有返回值的方法
代碼如下:
def decorate(test): #定義一個裝飾器函數 def bold(*args,**kwargs): #*args可以接收任意多個參數,**kwargs可以接受任意多個字典參數 print('style="font-weight:blod"') # 替換成你自己的代碼 res = test(*args,**kwargs) #這樣寫,即使被裝飾的test函數沒有參數或者沒有返回值都沒關系,不會報錯 return res #test函數有返回值就返回,沒有就返回None return bold
以上的代碼就完成了python萬能裝飾器的寫法,(*args,**kwargs)可以接收任意個數任意類型的參數,有沒有返回值都可以return。修改print這句話為自己想要的功能,就是自己的萬能裝飾器了。這樣一來,就可以裝飾任意的函數了。
測試一下上面的代碼:
@decorate #裝飾一個沒有任何參數沒有返回值的方法 def test1(): print("test1:沒有參數,沒有返回值") @decorate #裝飾一個有一個參數的方法 def test2(name): print("test2:帶參數%s"%name) @decorate #裝飾一個有返回值的方法 def test3(): strs = "test3:帶返回值" return strs test1()
#結果為:
#style="font-weight:blod" #test1:沒有參數,沒有返回值 test2("ss")
#結果為:
#style="font-weight:blod" #test2:帶參數ss a = test3() print(a)
#結果為:
#style="font-weight:blod" #test3:帶返回值