首先看一个示例
def testfunc(*a, **b):
这可不是类似C语言传入指针的函数,这是python中可变参数的表示,
*a表示可变参数,传入的类型为tuple
**b传入的类型为dict
>>> def testfunc(a, *b):
… print(a)
… print(b)
>>> testfunc(10, 15, 22, 40,100)
10
(15, 22, 40, 100)
可以看出,a只接收一个参数,剩下的均为b接收,如果我们打印出type(b)的话,会发现b为tuple类型。
**表示可变参数作为一个dict类型传入,既然是dict类型,调用就需要遵循特定的规则。
>>> def testfunc(a, **b):
… print(a)
… print(b)
>>> testfunc(10,c=100,d=150)
10
{‘d’: 150, ‘c’: 100}
需要注意的是:
- 一个函数内不能同时出现两个tuple可变参数或者同时出现两个dict可变参数,如下列代码会报错:
def test(**a, **b): 或者 def test(*a, *b):
- 一个函数内可以同时存在一个tuple可变参数和一个dict可变参数,但是tuple可变参数在函数定义时必须在前面如
def test(*a, **b):
反之如果这样定义def test(**a, *b):则会出错。