函数的参数
一、形参与实参
形参:在定义函数时括号内的定义的函数。相当于变量中的‘变量名’
实参:在调用函数时,括号内传入的值。相当于变量当中的“变量的值”
函数在调用的时候将值绑定到变量名上,函数调用结束之后,解除绑定
二、参数的具体应用
1、位置参数(按照从左到右的顺序定义的参数)
在定义函数时按照位置定义的函数就叫做位置函数
特性:在调用函数时必须按照位置为形参传值,多一个不行,少一个也不行
# def foo(x,y,z):
# print(x,y,z)
# foo(1,2,3)
# 再调用函数时,按照位置定义的实参,称为位置实参
# 位置实参会与形参一一对应
2、关键字参数
再调用函数时按照key-value的形式定义的实参,称为关键字参数,关键字函数相当于指名道姓的为形参传值,意味着即使不按照位置传值,也可以为指定的参数传值
# def foo(x,y,z):
# print(x,y,z)
# foo(x=1,y=3,z=5)
在调用函数时,位置实参可以和关键字参数混合使用,但是要注意以下几点:
1、必须遵循形参的规则
2、不可以为同一个形参重复传值
3、位置实参必须放到关键字实参前面
# def foo(x,y,z)
# print(x,y,z)
# foo(1,y=2,z=3)
3、默认参数
在定义阶段已经为某个形参赋值,那么该形参就称为默认参数,定义阶段有值就意味着调用阶段可以不传值。
默认参数的值只在定义阶段赋值一次,也就是说默认参数的值在定义阶段就已经固定死了
# def register(name,age,sex=‘male‘):
# print(name,age,sex)
# register(‘sean‘,20)
# register(‘able‘,25)
# register(‘jacky‘,30)
# register(‘lve‘,26,‘female‘)
# 默认参数的值应当设为不可变类型
# def register(name,hobby,l=None):
# if l is None:
# l=[]
# l.append(hobby)
# print(name,l)
# register(‘sean‘,‘paly‘)
# register(‘able‘,‘read‘)
# register(‘jacky‘,‘cook‘)
# register(‘lve‘,‘music‘)
对于经常需要变化的值,需要将对应的形参定义成位置形参
对于大多数情况都一样的情况,就需要将对应的形参定义为默认参数
4、可变长参数
可变长度指的是参数的个数可以不固定,实参当中又按照位置定义的实参和按照关键字定义的实参,所以可变长的实参指的就是按照这两种形式定义的实参个数可以不固定
其中在位置实参当中处理这种问题的方式是:“用*号将溢出的位置实参全部接收,然后保存成元组的形式赋值给args”
# def foo(x,y,z,*args) # print(x,y,z) # print(args)
# foo(1,2,3,4,5,6,7,8,9) #1,2,3,(4,5,6,7,8,9) # foo(1,2,3,*(4,5,6,7,8,9)) #*后面的实参可以是字符串、元组、列表 # foo(1,2,3,*[4,5,6,7,8,9]) # foo(1,2,3,*‘hello‘)
关键字参数:“用**将溢出的关键字实参全部接收,然后保存成字典的形式赋值给kwargs”
# def foo(x,y,z,**kwargs):
# print(x,y,z)
# print(kwargs)
# foo(1,2,3,a=4,b=5,c=6) # 1,2,3,{‘a‘:4,‘b‘:5,‘c‘:6}