1. 函数参数的两大分类
1. 形式参数
在'函数定义阶段'括号内依次写入的变量名就叫形式参数,简称"形参"
def index(a,b,c,d,e):
pass
# a,b就称之为是函数的形参
2. 实际参数
在'函数调用阶段'括号内依次传入的变量值就叫实际参数,简称"实参"
index(1, 2, 3)
# 1,2,3就称之为是函数的实参
"""
形式参数和实际参数之间的关系
把实际参数传递给形式参数,以形参=实参的形式传入----->以变量名=变量值的形式传入
形参就相当于是变量名,实参相当于是变量值
形参和实参在函数调用阶段临时绑定,当函数调用完毕,两者断开
"""
函数的形参形式其实只有一种,那就是变量名
函数的实参有很多中方式,但是抓住本质:就是数据值
2.位置参数和关键字参数(核心)
位置参数
在函数括号内依次写入的参数就是位置参数
位置形参
在函数'定义阶段'括号内从'左往右依次'写入的'变量名'就是位置形参
def index(a,b,c,d):
pass
# a,b,c,d就是位置形参
位置实参
在函数的'调用阶段'括号内从'左往右依次'写入的'数据值'就是位置实参
index(1,2,3,4)
# 1,2,3,4就是位置实参
关键字实参:
# 可以打破原来的顺序传递,就是传递参数不在按照顺序传递了
# register(age=18, name='kevin', gender='female')
# register('kevin', age=18, 'female') # 不行,位置参数不能跟在关键字的后面
# register('kevin', age=18, gender='female') # 行
# register(age=18, 'kevin', gender='female') # 不行
# register('kevin', name=18, gender='female') # 不行
'''位置参数不能写在关键字的后面,越简单的参数越靠前'''
3. 默认参数
# 前提是默认的形参
在函数定义阶段就可以给参数赋值了
1. 如果你在函数调用阶段,没有给形参传值,那就是要默认的
2. 如果你在函数调用阶段,给形参传值了,就是要你传的值
eg:让你写一个注册学员的功能
"""
两个角度理解
角度1:
在函数定义阶段,参数的值就已经固定死了,不能修改
角度2:
根据变量名和变量值在内存中关系来判断
"""
4.可变长参数
1. 不管我在调用函数的时候,传入多少个位置参数,都能正常运行
def index(name, password, x, y, *a):
print(name, password, a, x, y)
# print(a[0])
# print(a[1])
# print(a[2])
2. 不管我们在调用函数的时候,传入多少个关键字参数,都能正常运行
"""
**号在形参中的使用:
接收多余的关键字参数
"""
3. 不管我传入多少个位置参数和关键字参数,函数都能正常运行
def index(*a, **b):
print(a, b)
"""
注意:
*号和**号后面的变量可以任意起名,遵循变量的命名即可
在python中,推荐使用
*args: arguments 位置参数
**kwargs: keyword arguments 关键字参数
以后在定义函数的时候,如果我们不知道要传递多少个参数,我们就可以如下定义
def index(*args, **kwargs):
pass
"""
'''
*在实参中的使用,就是把列表、元组中的一个一个元素打散,然后以位置参数的形式传递
**号在实参中的使用:把字典打散成关键字的形式进行传递
'''