一、不定长参数
- 在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到所有的实参,它将会将所有的实参保存到一个元组中
def fn(*a):
print("a =",a,type(a))
fn(1,2,3,4,5)

- 带星号的形参只能有一个
- 带星号的参数,可以和其他参数配合使用
def fn2(a,b,*c):
print('a =',a)
print('b =',b)
print('c =',c)
fn2(1, 2, 3, 4, 5)

实例
def sum(*nums):
result = 0
for n in nums :
result += n
print(result)
sum(123,456,789,10,20,30,40)

可变参数(不定长参数)不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递
实例1:带*的参数后的所有参数,必须以关键字参数的形式传递
def fn2(a,*b,c):
print('a =',a)
print('b =',b)
print('c =',c)
fn2(1, 2, 3, 4, c = 5)

实例2:带*的参数后的所有参数,必须以关键字参数的形式传递
def fn2(*a,b,c):
print('a =',a)
print('b =',b)
print('c =',c)
fn2(1, 2, 3, b = 4, c = 5)

实例3:如果在形参的开头直接写一个*,则要求我们的所有的参数必须以关键字参数的形式传递
def fn2(*,a,b,c):
print('a =',a)
print('b =',b)
print('c =',c)
fn2(a=3,b=4,c=5)

实例4:*形参只能接收位置参数,而不能接收关键字参数
def fn3(*a) :
print('a =',a)
fn3(b=1,d=2,c=3,e=10,f=20)

实例5:**形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中
def fn3(b,c,**a) :
print('a =',a,type(a))
print('b =',b)
print('c =',c)
fn3(b=1,d=2,c=3,e=10,f=20)

二、参数的解包(拆包)
1.元组的解包
def fn4(a,b,c):
print('a =',a)
print('b =',b)
print('c =',c)
t = (10,20,30)
fn4(*t)

2.字典的解包
def fn4(a,b,c):
print('a =',a)
print('b =',b)
print('c =',c)
t = (10,20,30)
d = {'a':100,'b':200,'c':300}
fn4(**d)
