当我们在写程序时,不确定将来要往函数中传入多少个参数,即可使用可变参数(即不定长参数),用*args,**kwargs表示。
*args称之为Non-keyword Variable Arguments,无关键字参数;
**kwargs称之为keyword Variable Arguments,有关键字参数;
当函数中以列表或者元组的形式传参时,就要使用*args;
当传入字典形式的参数时,就要使用**kwargs。
*args示例:
当位置参数与不定长参数一起使用时,先把参数分配给位置参数再将多余的参数以元组形式分配给args:
>>> def test(a, b, *args):
c = args
print(a, '\n', b, '\n', c)
>>> test("this is a", "bbbb", "is c", "09090", "8888")
>>> # 当提供的参数多于位置参数时的输出结果:
this is a
bbbb
('is c', '09090', '8888')
>>># 当提供的参数少于位置参数时的输出结果:
>>> test("this is a", "bbbb")
this is a
bbbb
()
>>>
**kwargs示例:
当传入函数的参数为字典格式时,使用**kwargs。
def test_kwargs(a,b,*args,**kwargs):
print("a=", a)
print("b=", b)
c = args
print("c=", c)
dict = kwargs
print("name=",dict['name'])
print("age=", dict['name'])
test_kwargs(0,1,2,3,name="test1", age=22)
输出结果:
a= 0
b= 1
c= (2, 3)
name= test1
age= 22
除了上述传参方式,还可以直接传入整个字典:
def test_kwargs(a,b,*args,**kwargs):
print("a=", a)
print("b=", b)
c = args
print("c=", c)
dict = kwargs
print("name=",dict['name'])
print("age=", dict['age'])
test_dict = {"name": "test2", "age": 23}
test_kwargs(0,1,2,3,**test_dict)
输出结果:
a= 0
b= 1
c= (2, 3)
name= test2
age= 23
-END-