python自定义函数中有两中不定长参数,第一种是*name,第二种是**name。加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。加了两个星号 ** 的参数会以字典的形式导入。
第一种形式的不定长参数,在传入额外的参数时可以不用指明参数名,直接传入参数值即可,第二种因为返回的是字典,所以传入时需要指定参数名。
两个简单例子:
*name 形式:
>>> def test(a,b,*args):
... print(a)
... print(b)
... print(args)
...
>>> test(1,2,3,4,5)
1
2
(3, 4, 5)
>>>
前1和2这两个数据传给了a和b,而剩下的3,4,5三个数都以元祖的形式存在了args这个参数中,所以在第四行输出args时,输出的是个元组,当然也可以像访问元组那样输出args中的某一个值,print(args[0])
**name 形式:
>>> def test2(a,b,**args):
... print(a)
... print(b)
... print(args)
...
>>> test2(1,2,m=3,n=4)
1
2
{'m': 3, 'n': 4}
>>>
可以看出,前1和2这两个数据传给了a和b,而 m 和 n 这两个参数被以字典的形式存在的args中,输出的是一个字典。