站在形参的角度
形参:先位置,再关键字
# 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接收 *聚合成元组