站在形参的角度


形参:先位置,再关键字

# def student(name,score,gender='boy'):  #形参
#     print('南京三班学生%s,性别%s,成绩%s'%(name,gender,score))
#
# student('班长',100) #默认boy,不一样时单独写出来
# student('小李',98)
# student('老林',99,'girl')
动态传参 一  *args     #不知道参数有多少个时,返回元组
# def sum_func(*args):
#     s=0
#     for i in args:
#         s+=i
#     return s
#
# ret1=sum_func(1,2)
# ret2=sum_func(1,2,3)
# ret3=sum_func(1,2,3,4)
# ret4=sum_func(1,2,3,4,5,6)
# print(ret1)
# print(ret2)
# print(ret3)
# print(ret4)

先位置,再动态传参

# def demo(a,b,c,*args):
#     print(a)
#     print(b)
#     print(c)
#     print(args) #以元组的形式返回
#
# demo(1,2,3,4,5,6,7)
# demo(1,2,3,4)


# def demo(*args,a,b):  #报错,a,b没有接收到值
#     print(a)
#     print(b)
#     print(args)
#
# demo(1,2,3,4,5)#报错


#正常不这么写  3.5之后可以
# def demo(*args,a,b):
#     print(a)
#     print(b)
#     print(args)
#
# demo(1,2,3,a=4,b=5)

总结:形参顺序------位置,动态参数,关键字

# def demo(a,b,*args,c='wind'):
#     print(a)
#     print(b)
#     print(c)
#     print(args)

# demo(1,2,3,4,5)
动态参数 二  **kwargs    只能接收字典,返回字典
# def func(**kwargs):
#     print(kwargs)
#
# func(a=1,b=2,c=3)  #返回字典的形式



def func(**kwargs):  #字典接收
    print(kwargs)

lst=[1,2,3]
tup=(4,5,6)
dic={'k1':'v1','k2':'v2','k3':'v3'}

func(**dic)  #字典传
# func(*lst)  #报错
# func(tup)    #报错

*  在实参,是打散,打散本来数据的结构,显示元素本身

def func(a,b,c):
    print(a,b,c)

lst=[1,2,'3']
tup=(4,5,6)
dic={'k1':'v1','k2':'v2','k3':'v3'}

# func(lst) #报错
func(*lst) #打散   把列表结构打散,显示元素本身的结构
func(*tup)
func(*dic)  #传的是key值
func(*dic.keys())
func(*dic.values())
func(*dic.items()) #以元组的形式传键值对  ('k1', 'v1') ('k2', 'v2') ('k3', 'v3')

* 在形参,是聚合,把传的散的数据,聚合成一个新的数据结构

# def func(*args,**kwargs): #聚合    #传的时候打散,返回的时候聚合
#     print(args)
#     print(kwargs)
#
# lst=[1,2,3]
# tup=(4,5,6)
# dic={'k1':'v1','k2':'v2','k3':'v3'}

# func(*lst,a=1,b=2)  # (1, 2, 3)
#                     # {'a': 1, 'b': 2}

# func(*tup,a=1)
# func(1,2,3,b='2')
# func(*dic,*dic.items()) #全部被*args接收, **kwargs 没有接收到,是空字典



# def func(a,*args,e='hello',**kwargs): #聚合
#     print(a)
#     print(args)
#     print(e)
#     print(kwargs)
#
# lst=[1,2,3]
# tup=(4,5,6)
# dic={'k1':'v1','k2':'v2','k3':'v3'}

# func(444,*lst,b=1,d='12')
# func(666,*tup,**dic)   #**dic  必须是字典,就会被kwargs接收   *聚合成元组