python中用以下方式解决参数个数的不确定性。
(1)函数中用*arg方式接收数据,以元组(tuple)的形式传参。
def func(x,*args):
print("x={0},args={1}".format(x,args))
res=x
for i in args:
res=res+i
return res
print("result=",func(1,2,3))
#输出结果为
x=1,args=(2, 3)
result= 6
上面的例子中把值1传给了x,把值2,3放在一个tuple中,为args。
函数func中args参数名称可以改变,但符号*必须有。可以不给args传参数。
print(func(1))
#输出结果为
x=1,args=()
result=1
从打印结果看,本例中的*args是一个空的tuple。
(2)函数中用**kargs方式接收数据,以字典(dict)的形式传参。
def func2(x,**kwargs):
print('x=',x)
print('kwargs=',kwargs)
print(type(kwargs))
print(func2(1,a=2,b=3))
#输出结果为
x= 1
kwargs= {'a': 2, 'b': 3}
<class 'dict'>
用**kwargs的形式收集值时,得到的数据类型是字典,因为字典是以“键-值”对的形式出现的,所以传参的时候也要说明“键”和“值”。
如
def func2(x,**kwargs):
print('x=',x)
print('kwargs=',kwargs)
print(type(kwargs))
print(func2(1,2,3))
#结果会报错
也可以直接传入tuple和dict类型的参数
def func3(a, b, *args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)
tup = (1,2,3)
dic = {"name":"rita", "age":20}
func3(1, 2, *tup, **dic)
#输出结果为:
1
2
(1, 2, 3)
{'name': 'rita', 'age': 20}