第三篇:函数之参数
函数的参数
1、函数的参数分为两大类:形参与实参
形参:指的是在定义函数时,括号指定的参数,本质就是变量名;
实参:指的是在调用函数时,括号内传入的值,本质就是值。
两者关系:只有在调用函数时才会在函数体内发生实参(值)与形参(变量名)的绑定关系,该绑定关系只有在调用函数时临时生效,调用函数结束后就解除绑定。
1 def foo(x, y): # x=1,y=2 2 print(x) 3 print(y) 4 foo(1, 2)
2、位置参数
2.1 位置形参:在定义函数时,按照从左到右的顺序依次定义的的形参称为位置形参,定义位置形参,调用的时候必须传值,必须一一对应,多,少都不行。
2.2 位置实参:在调用函数时,按照从左到右的顺序依次传入的值,在传值的按照顺序与形参一一对应。
3.关键字实参:在调用函数时,按照key=value的格式定义的实参,1.传值的时候,顺序可以完全打乱,并且可以混合使用关键字实参与位置实参,但是位置实参必须在关键字实参的左边,且不能为一个形参重复传值。
3、默认参数
在定义函数的时候,就已经为某些参数绑值,称之为默认参数。
注意: 1.定义阶段已经有值,调用阶段可以不用传值;
2.默认形参必须放到位置形参的后面;
3.默认形参的值只在定义阶段生效一次,在函数定义后发生的改动无效;
4.默认参数值通常为不可变类型。
1 def register(name,age,sex='female'): 2 print(name,sex,age) 3 4 register('wxx',38) #wxx female 38 5 register('alex',73,'male') #alex male 73
4.可变长度的参数
指的是在调用函数时,函数的参数个数不固定,然而实参终究是以形参传值的,针对两种形式参数个数不固定,对应着形参必须有两种解决方案:*、**
来处理溢出位置实参与溢出的关键字实参。
4.1 * 会将溢出的位置实参存成元组,然后赋值给紧跟其他的变量名
4.1.1形参中带*
4.1.2 形参中带*,实参中带*,窍门:但凡碰到实参中带*,都将其打散成位置实参,然后考虑传值。
4.1.3 实参中带*,窍门:但凡碰到实参中带*,都将其打散成位置参数,然后考虑传值
4.2. ** 会将溢出的关键字实参存成字典,然后赋值给紧跟其后的变量名
4.2.1 形参中带**
4.2.2 形参中带**,实参中带**, 窍门:但凡碰到实参中带**,都先将其打散成关键字实参,然后考虑传值
4.2.3 实参中带**
1 # def foo(x,y,z): 2 # print(x,y,z) 3 # 4 # # foo(1,**{'a':1,'b':2,'y':111,'z':222}) #foo(1,b=2,a=1,y=111,z=222) 5 # # foo(1,**{'y':111,'z':222}) #foo(1,y=111,z=222) 6 # foo(**{'z':1,'y':2,'x':3}) #foo(y=2,z=1,x=3)
case: