python函数中的参数*args和**kwargs的含义和用法
python函数中的参数*args和**kwargs的含义和用法
在python语言写成的模块中的函数里,常常可以看到函数的参数表列里面有这两个参数,形如:
def some_function(*args, **kwargs):
to do list
return 0
首先,解释星号的作用,一个星号*
的作用是将tuple或者list中的元素进行unpack,分开传入,作为多个参数;两个星号**
的作用是把dict类型的数据作为参数传入。
kwargs是keyword argument的缩写,args就是argument。我们知道,在Python中有两种参数,一种叫位置参数(positional argument),一种叫关键词参数(keyword argument),关键词参数只需要用 keyword = somekey
的方法即可传参,而位置参数只能由参数位置决定。这也就决定了位置参数一定要在前面,否则关键词参数数量的变化(比如有些kwargs有默认值因此没有传参或者在后面传参的),都会使得位置无法判断。因此常见的也是*args
在 **kwargs
前面。
这两个的用途和效果如下:
def this_fun(a,b,*args,**kwargs):
print a
print b
print args
print kwargs
this_fun(0,1,2,3,index1=11,index2=22)
0
1
(2, 3)
{'index2': 22, 'index1': 11}
也就是说,第一中不定的参数形式把剩下的没有关键字的参数收起来形成一个tuple,而第二种把有关键字的收起来做成一个字典。
2018年06月05日23:27:57
抖落岁月的尘沙,以纯银一样的声音,和你的梦对话,世界也许很小很小,心的领域很大很大。 —— 诗人,舒婷