如何写一个Python万能装饰器,既可以装饰有参数的方法,也可以装饰无参数方法,或者有无返回值都可以装饰
Python中的装饰器,可以有参数,可以有返回值,那么如何能让这个装饰器既可以装饰没有参数没有返回值的方法,又可以装饰有返回值或者有参数的方法呢?有一种万能装饰器,代码如下:
def decorate(test): #定义一个装饰器函数
def bold(*args,**kwargs): #*args可以接收任意多个参数,
#**args可以接收任意多个字典参数
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:带返回值