函数传参与形参定义
函数的参数传递
传递方式:
位置传参:实际参数(实参) 的对应关系与形式参数(形参)的对应关系是按位置来依次对应的
序列传参:序列传参是指在函数调用过程中,用 * 将序列拆解后按位置进行传递的传参方式
序列传参时,序列拆解的位置将与形参--对应
序列的位置信息对应相应的形参位置
关键字传参:传参时,按着形参的名称给形参赋值, 实参和形参按形参名进行匹配
字典关键字传参:指实参为字典,将字典用 '**' 拆解后再进行关键字传参的传参方式
字典的键名和形参名必须一致;字典的键名必须为字符串(标识符);字典的键名要在形参中存在
函数的综合传参:函数的传参方式在能确定形参能唯一匹配到相应实参的情况下可以任意组合
位置传参(序列传参) 要在 关键字传参(字典关键字传参)的左侧
#位置传参 def func(a,b,c): #位置形参 print("a=",a) print("b=",b) print("c=",c) func(1,2,3) # *序列传参 def func(a,b,c): print("a=",a) print("b=",b) print("c=",c) p = [11,34,111111] func(p[0],p[2],p[1]) #序列传参 func(*p) func(*"dfv") func(*(101,303,202)) #关键字传参 def func(a,b,c): print("a=",a) print("b=",b) print("c=",c) func(a='c',b='a',c='b') # **字典关键字传参 def func(a,b,c): print("a=",a) print("b=",b) print("c=",c) d = {'a':55,'c':'111','b':88} func(**d) def myfun1(a, b, c): pass # 调用时: myfun1(100, *[200, 300]) myfun1(*(100, 200), 300) myfun1(*[100], 200, *(300,)) myfun1(100, c=300, b=200) # 正确 myfun1(c=300, b=200, 100) # 错误 myfun1(100, **{'c': 300, 'b': 200})
形参定义
函数的缺省参数:def 函数名(形参名=默认实参1, 形参名2=默认实参2, ...):
缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数
位置形参:def 函数名(形参名1, 形参名2, ...):
星号元组形参:def 函数名(*元组形参名):
收集多余的位置传参
命名关键字形参:def 函数名(*, 命名关键字形参): 或 def 函数名(*args, 命名关键字形参):
强制所含的参数都必须用关键字传参或字典关键字传参
双星号字典形参:def 函数名(**字典形参名):
收集多余的关键字传参
#缺省传参 def personInfo(name,age=0,addr='不详'): print("name:",name,"age:",age,"addr:",addr) personInfo("BOB",15) def personInfo(name,age=0,addr='不详'): print("name:",name,"age:",age,"addr:",addr) personInfo("BOB",15) # *元组形参 def func1(*args): print("实参的数量:",len(args)) print("实参的值是:",args) func1(1,2,3) #3个实参 func1("abc",1,2.2,True,None) #5个实参 #命名关键字形参 def func2(p1,*args,p2): print('p1: ',p1) print('args-length: ',len(args)) print('args: ',args) print('p2: ',p2) func2(1,*[1,2,3,4,5],p2=2) #args-length:5 (1, 2, 3, 4, 5) func2(1,[1,2,3,4,5],p2=2) #args-length:1 [(1, 2, 3, 4, 5),] # **字典形参 def func3(**kwargs): print('kwargs-length: ',len(kwargs)) print('kwargs: ',kwargs) func3(a=2,b=3,c=4,d=5,p2=2) #kwargs-length:5 {'a': 2, 'b': 3, 'c': 4, 'd': 5, 'p2': 2} func3(L=[1,2,3,4,5],p2=2) #kwargs-length:2 {'L': [1, 2, 3, 4, 5], 'p2': 2}