今天,在查一个方法的帮助文档时,我发现函数的入参是*args
与**kwargs
,其中args
是一些入参的元组,kwargs
就不知道,google了一下,恍然大悟,kwargs
就是传入的多个键值对key = value
参数。
1. args,kwargs是什么?
例子:
def test(a, *args, **kwargs):
print(a)
print(args)
print(kwargs)
test(1, 2, 3, d = '4', e = 5)
输出结果:
1
(2, 3)
{'d': '4', 'e': 5}
即1是参数a的值,元组(2, 3)是args
的值,kwargs
表示在args
之后的多个键值对。再看一个例子:
def foo(*args, **kwargs):
print('args = ', args)
print('kwargs = ', kwargs)
print('---------------------------------------')
if __name__ == '__main__':
foo(1, 2, 3, 4)
foo(a = 1, b = 2, c = 3)
foo(1, 2, 3, 4, a = 1, b = 2, c = 3)
foo('a', 1, None, a = 1, b = '2', c = 3)
输出结果如下:
args = (1, 2, 3, 4)
kwargs = {}
---------------------------------------
args = ()
kwargs = {'a': 1, 'b': 2, 'c': 3}
---------------------------------------
args = (1, 2, 3, 4)
kwargs = {'a': 1, 'b': 2, 'c': 3}
---------------------------------------
args = ('a', 1, None)
kwargs = {'a': 1, 'b': '2', 'c': 3}
可以看到,args
和kwargs
是python中的可变参数:args
表示任意多个无名参数,返回一个tuple;kwargs
表示关键字参数,返回一个dict。
同时使用args和kwargs时,args参数必须在kwargs参数之前,像foo(a = 1, b = '2', c = 3, 'a', 1, None)
这样的调用,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。
2. 定义创建字典的函数
还有一个很漂亮的用法,就是定义创建字典的函数:
def creat_dict(**kwargs):
return kwargs
print(creat_dict(e = 3))
print(creat_dict(a = 1, b = 2, c = 3) == {'a':1, 'b':2, 'c':3})
输出结果如下:
{'e': 3}
True
其实python带有类dict,可以使用dict(e = 3)、dict(a = 1, b = 2, c = 3)
创建一个字典。