一 让被装饰函数即有返回值又能带任意个参数的装饰器
1.1 伪代码
def 装饰器函数(func):
def 真正的被装饰函数(*args,**kwargs):
前置代码
ret = func(*args,**kwargs)
后置代码
return ret
return 真正的被装饰函数
1.2 代码
def 装饰器函数(func):
def 真正的被装饰函数(*args, **kwargs):
print("前置代码")
ret = func(*args, **kwargs)
print(args)
print(kwargs)
print("被装饰函数的return是",ret)
print("后置代码")
return 真正的被装饰函数
@装饰器函数
def test(aa,bb,cc=33,dd=44):
print("我是test函数")
return aa + bb + cc + dd
if __name__ == "__main__":
test(6,8,9,dd=100)
二 让装饰器中的变量能传递给被装饰函数
2.1 伪代码
def 装饰器函数(func):
def 真正的被装饰函数(*args,**kwargs):
前置代码
x = 1
ret = func(*args,a=x,**kwargs)
后置代码
return 真正的被装饰函数
@ 装饰器函数
def test(t1,t2,a):
print(a)
2.2 代码
def 装饰器函数(func):
def 真正的被装饰函数(*args,**kwargs):
print("前置代码")
x = 1
ret = func(*args, a=x, **kwargs)
print("后置代码")
return ret
return 真正的被装饰函数
@ 装饰器函数
def test(t1,t2, a):
print(a)
test(1,2)
三 让装饰器能带参数- @ 装饰器函数(参数) 方法一 :三层装饰器
3.1 伪代码
3.2 代码
四 让装饰器能带参数- @ 装饰器函数(参数) 方法一 :使用两个装饰器
4.1 伪代码
def 装饰器函数1(接收由装饰器带来的参数1, 接收由装饰器带来的参数2):
def wrapper1(func):
return 装饰器函数2(func=func, 接收由装饰器带来的参数1=接收由装饰器带来的参数1, 接收由装饰器带来的参数2=接收由装饰器带来的参数2)
return wrapper1
def 装饰器函数2(func,**kwargs):
def 真正的被装饰函数(*args):
前置代码
ret = func(*args)
print("由装饰器传入的参数是:",kwargs.get('接收由装饰器带来的参数1'))
print("由装饰器传入的参数是:",kwargs.get('接收由装饰器带来的参数2'))
后置代码
return 真正的被装饰函数
@装饰器函数1("abc",666)
def test(aa,bb,cc=33,dd=44):
return aa + bb + cc + dd
4.2 代码
def 装饰器函数1(flag1,flag2):
def wrapper1(func):
return 装饰器函数2(func=func, flag1=flag1,flag2=flag2)
return wrapper1
def 装饰器函数2(func,**kwargs):
def 真正的被装饰函数(*args):
print("前置代码")
ret = func(*args)
print("由装饰器传入的参数flag1是:",kwargs.get('flag1'))
print("由装饰器传入的参数flag2是:",kwargs.get('flag2'))
print("被装饰函数的return是",ret)
print("后置代码")
return 真正的被装饰函数
@装饰器函数1("abc",666)
def test(aa,bb,cc=33,dd=44):
print("我是test函数")
print("test函数的aa=",aa)
print("test函数的bb=",bb)
print("test函数的cc=",cc)
print("test函数的dd=",dd)
return aa + bb + cc + dd
if __name__ == "__main__":
test(6,8,9)