转自:http://blog.csdn.net/yjk13703623757/article/details/76521420
今天,在查一个方法的帮助文档时,我发现函数参数是*args与**kwargs。
args是所有参数的数组,kwargs就不知道,google了一下,恍然大悟。kwargs就是传入的多个键值对key = value
,运行结果为字典。
1. *args,**kwargs是什么?
例子:
def test(a, *args, **kwargs): print(a) # print(b) # print(c) print(args) print(kwargs) test(1, 2, 3, d = '4', e = 5)
输出结果:
1 (2, 3) {'e': 5, 'd': '4'}
即1是参数a的值,数组(2, 3)是args的值,kwargs表示在args之后多个键值对。kwargs对参数位置不敏感。
再看一个例子:
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, 'c': 3, 'b': 2} --------------------------------------- args = (1, 2, 3, 4) kwargs = {'a': 1, 'c': 3, 'b': 2} --------------------------------------- args = ('a', 1, None) kwargs = {'a': 1, 'c': 3, 'b': '2'} ---------------------------------------
可以看到,*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(a = 1, b = 2, c = 3) == {'a':1, 'b':2, 'c':3}) creat_dict(e = 3)
输出结果如下:
{'e': 3}
其实python带有类dict,可以使用dict(e = 3)
创建一个字典。