可变长参数
可变长参数:指的是在调用函数时,传入的参数个数可以不固定
调用函数时,传值的方式无非两种,一种是位置实参,另一种是关键字实参,因此形参也必须得有两种解决方法,以此来分别接收溢出的位置实参(*)与关键字实参(**)
一、可变长实参之*
# 可变长参数*
# *args会接受多于的位置实参,尽量不使用其他的变量名,而应该使用args,args是约定俗称
def func(name, pwd, *args):
print('name:', name, pwd, )
print(args)
return 1
res = func('randy', 123, 'a', 1, 3)
print(res)
结果:
('a', 1, 3)
1
二、可变长形参之**
形参中的会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给后的参数。需要注意的是:**后的参数名约定俗成为kwargs。
# 可变长参数 **
# kwargs会接收多余的关键字实参,以字典形式存储
def func(name, pwd, **kwargs):
print('name', name, 'pwd', pwd)
print(kwargs)
return 1
res = func('randu', 1234, a=2, b=4)
print(res)
结果:
{'a': 2, 'b': 4}
1
三、 可变形参*之*(a,b,c)
*会把元组打撒成位置实参传给形参
def func(name, pwd, x, y, z):
print(name, pwd, x, y, z)
return 1
tup = (1, 2, 3)
print('randy', 12, *tup) # *会把元组打撒成位置实参传给形参
结果:
randy 12 1 2 3
四、可变形参**之**({‘a’:1, ‘b’:3})
实参中的,会将后参数的值循环取出,打散成关键字实参。以后但凡碰到实参中带的,它就是关键字实参,应该马上打散成关键字实参去看。
def func(name, pwd, **kwargs):
print(name, pwd)
print(kwargs)
return 1
dic = {"a": 1, 'b': 3}
res = func('2', 3, **dic) # 会把字典打散成关键字实参传给形参
结果:
2 3
{'a': 1, 'b': 3}