首先裝飾器寫法
“@ + 函數(shù)名”在執(zhí)行函數(shù)上方
python函數(shù)中的參數(shù)args和*kwargs的含義和用法
在python語言寫成的模塊中的函數(shù)里,常常可以看到函數(shù)的參數(shù)表列里面有這兩個參數(shù),形如:
def some_function(*args, **kwargs):
首先,解釋星號的作用,一個星號*的作用是將tuple或者list中的元素進行unpack,分開傳入,作為多個參數(shù);兩個星號**的作用是把dict類型的數(shù)據(jù)作為參數(shù)傳入。
裝飾器具體使用
函數(shù)process1
def process1(**kwargs):
print(kwargs)
a = kwargs['a']
b = kwargs['b']
print("a+b={}".format(a+b))
執(zhí)行結(jié)果:
process1(a=1,b=3)

結(jié)果1
函數(shù)set_a
def set_a(f):
def wrapper(**kwargs):
key = kwargs['key']
print('start')
print(kwargs)
if key == 1:
f(ccc=123,**kwargs)
else:
return False
print('end')
return wrapper
在process1上添加set_a裝飾器
def set_a(f):
def wrapper(**kwargs):
key = kwargs['key']
print('start')
print(kwargs)
if key == 1:
f(ccc=123,**kwargs)
else:
return False
print('end')
return wrapper
@set_a
def process1(**kwargs):
print(kwargs)
a = kwargs['a']
b = kwargs['b']
print("a+b={}".format(a+b))
process1(a=1,b=3,key=1)
執(zhí)行
process1(a=1,b=3,key=1)
參數(shù)key是裝飾器set_a中需要用到,得到結(jié)果如下,通過裝飾器set_a多傳入了一個參數(shù)ccc=123

圖片.png
在process1上再添加set_b裝飾器
def set_a(f):
def wrapper(**kwargs):
key = kwargs['key']
print('start')
print(kwargs)
if key == 1:
f(ccc=123,**kwargs)
else:
return False
print('end')
return wrapper
def set_b(f):
def wrapper(**kwargs):
print(kwargs)
print('start2')
f(**kwargs,dd=2)
print('end2')
return wrapper
@set_a
@set_b
def process1(**kwargs):
print(kwargs)
a = kwargs['a']
b = kwargs['b']
print("a+b={}".format(a+b))
process1(a=1,b=3,key=1)
得到結(jié)果如下,通過裝飾器set_a多傳入了一個參數(shù)ccc=123,所有參數(shù)會傳入set_b函數(shù)內(nèi),然后又多傳入一個參數(shù)dd=2

圖片.png