这篇文章主要记录下函数在调用的时候形参和实参的问题,首先下记一下几个定义。
(一).函数传参的方式:
1.位置传参:实参与形参按位置一一对应
*序列传参:属于位置传参的一种,用‘*’将序列拆解后按位置一一对应传参
2.关键字传参:实参和形参通过关键字名称一一对应
*字典传参:属于关键字传参的一种,用‘**’将字典拆解后按关键字传参
*关键字形参要定义在位置形参之后
(二).缺省参数:
*在没有字典形参的情况下,缺省形参必须要定义在最后。
(三).形参的定义:
位置形参:按位置一一对应
元组形参:属于位置形参的一种,用*args来收集位置传参的时候多余的实参,并组成一个元组
关键字形参:只有具有相同的关键字的实参才能一一对应。(没有关键字的就是位置传参了)
字典形参:和元组形参差不多的作用,针对多出来的关键字实参进行收集并组成字典,(**kwargs)
接下来记一个简单的例子,函数传参并不会太复杂。
def fn(a,b,*args,c,d,g=0,**kwargs):
print(a,b,args,c,d,kwargs,g)
fn2(1,2,3,4,5,c=6,d=7,e=8,f=9,g=10)
consequence:1 2 (3, 4, 5) 6 7 {'e': 8, 'f': 9} 10
解释:a和b为位置形参,接受实参的1和2
实参中的c=6和d=7为关键字传参,所以在他们前面的3,4,5都为多余的位置形参,全部被args接收
g = 0是有缺省值的形参,因为还有一个字典形参,所有缺省形参排在关键字形参最后,字典形参之前
e和f在函数形参中没有找到对应的关键字,于是被kwargs收集成了字典