一:函数的参数分为两大类:
形式参数(形参):在定义函数阶段,括号内定义的参数/变量名称为形参
实际参数(实参):在调用函数阶段,括号内传入的值/变量值称为实参
ps:在调用函数阶段会将实参的值绑定给形参,这种绑定关系只在调用函数时生效,在函数执行完毕后就会解除绑定
def func(x,y):#x=1,y=2
print(x,y)
func(1,2)
二:细分:
1.位置参数:
位置形参:在定义阶段,按照从左到右的顺序依次定义的形参称之为位置形参
特点:但凡是按照位置定义的形参,必须被传值,不能多不能少
def func(x,y,z):
print(x,y,z)
func(1,2)#错误
func(1,2,3)
func(1,2,3,4)#错误
位置实参:在调用阶段,按照从左到右的顺序依次传入的值称之为位置实参
特点:1、与形参一一对应
2.关键字实参:
在调用阶段,按照key=value的形式定义的实参称之为关键字实参
特点:可以完全打乱顺序,但仍然能为指定的形参传值(总结:指名道姓地为指定的形参传值)
def func(x,y,z)
print(x,y,z)
func(x=1,y=2,z=3)
func(y=2,x=1,z=3)
3.默认形参:在定义阶段,就已经为形参赋值,该形参称之为默认参数
特点:
1.定义阶段就已经有值意味着调用阶段可以不用传值
def func(x,y,z=100):
print(x,y,z)
func(10,20)
func(10,20,200)
def list1(name,age,sex=‘famale‘):
print(name,age,sex)
list1(‘gxt‘,18)
list1(‘jjw‘,18)
list1(‘fbb‘,18)
list1(‘xia‘,19,sex=‘male‘)
2.位置形参必须放到默认形参的前面
3.默认形参的值在函数定义阶段就已经固定死了,定义阶段之后的改动不会影响该值
4.默认形参的值通常应该是不可变类型
def hobby_list(name,x,hobby=None):
if hobby is None:
hobby=[]
hobby.append(x)
print(name,hobby)
hobby_list(‘xa‘,‘eat‘,)
hobby_list(‘lbb‘,‘dance‘)
4.可变长参数:
可变长参数:指的是在调用阶段,实参数个数是不固定的
实参无非两种形式(位置实参,关键字实参),对应着形参也必须有两种解决方案来分别接收溢出位置实参或者关键字实参
*--->溢出的位置实参
**--->溢出的关键字实参
应用:
def sum(*x):
res=0
for i in x
res+=i
return res
print(sun(1,2,3,4,5))
* 的用法
在形参前加*:*会将溢出的位置实参存成元组的形式,然后赋值给*后的形参名
def func(x, y, *z):
print(x, y, z)
func(1, 2, 3, 4, 5)
在实参前加*:但凡碰到实参中带*的,先将实参打散成位置实参再与形参做对应
def func(x, y, z):
print(x, y, z)
func(*[1, 2, 3])
**的用法
在形参前加**:**会将溢出的关键字实参存成字典的形式,然后就赋值给**后的形参名
在实参前加**:但凡碰到实参中带**的,先将实参打散成关键字实参再与形参做对应
原文:https://www.cnblogs.com/xiamenghan/p/9702356.html