一.*args和**kwargs原理
先看个例子:
def test(*args,**kwargs):
print("args =",args)
print("kwargs =",kwargs)
print("----------------------------------")
if __name__ == '__main__':
test(1,5,94,564)
test(a=1,b=2,c=3)
test(1,2,3,4,a=1,b=2,c=3)
test('I love python',1,None,a=1,b=2,c=3)
#输出:
args = (1, 5, 94, 564)
kwargs = {}
----------------------------------
args = ()
kwargs = {'a': 1, 'b': 2, 'c': 3}
----------------------------------
args = (1, 2, 3, 4)
kwargs = {'a': 1, 'b': 2, 'c': 3}
----------------------------------
args = ('I love python', 1, None)
kwargs = {'a': 1, 'b': 2, 'c': 3}
----------------------------------
可以看到这两个是python中的可变参数,*args表示任何多个无名参数,他是个tuple,**kwargs表示关键字参数,它是个dict。在同时使用*args和**kwargs时,必须*args参数列要在**kwargs前面,要是test(a=1,b=2,c=3,1,2,3,4)这样调用的话肯定会报语法错误的!
二.使用**kwargs创建字典:
def kw_dict(**kwargs):
return kwargs
print(kw_dict(k1='v1',k2='v2',k3='v3'))
#执行结果:
{'k3': 'v3', 'k2': 'v2', 'k1': 'v1'}