函数参数的两大分类
函数参数可形式参数(形参)和实际参数(实参)两大类
形参:
在函数定义阶段括号内所填写的参数
def func(a,b):
pass
实参:
在函数调用阶段括号内所填写的参数
func(1,2)
"""
形参与实参的关系
我们可以将形参看成是变量名 实参看成是变量值
两者在函数调用阶段临时绑定 函数运行结束断开
形参的表现形式只有一种就是变量名
实参的表现形式有很多种(但是把握核心 就是 数据值)
"""
位置参数
按照从左往右的顺序依次填入的参数
位置形参:
在函数定义阶段括号内按照从左往右的循序依次填入的变量名
def func(a, b):
pass
位置实参:
在函数调用阶段括号内按照从左往右的循序依次传入的数据值
func(1, 2)
"""
1.位置形参与位置实参在函数调用阶段 按照位置一一对应绑定
2.位置参数在绑定的时候多一个不行少一个也不行
"""
关键字参数
默认参数(默认形参)
1.该形参在函数调用阶段如果不给值,贼使用默认的
2.该形参在函数调用阶段可以继续给值 给值后使用给定的值
def func(a,b=2):
print(a,b)
fun(1)
func(2,3)
关键字实参(可以打破位置顺序)
在函数调用阶段通过形参名=数据值的方式指名道姓的传值
"""
位置形参与默认值形参在定义的时候
位置形参必须在默认值形参的前面
位置实参必须在关键字实参的前面
"""
可变长参数
可变长参数可以按照位置参数和关键字参数分为两种
1. 可变长位置参数
函数无论传入多少位置参数都可以正常运行
2. 可变长关键字参数
函数无论传入多少关键字参数都可以正常运行
可变长位置参数
1. 可变长位置形参
def func(x,y,*args):
print(x, y, arg)
func()
func(1)
func(1, 2, 3, 4, 5)
"""
*号在形参中的使用
用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
"""
2. 可变长位置实参(*在实参中的使用)
def index(*args):
print(arg)
l1 = [11,22,33,44,55,66,77,88,99]
index(*l1)
"""
*号在实参中使用会将列表,元组内的元素打散成位置参数的形式一一传值
"""
可变长关键字参数
1. 可变长关键字形参
def func(x, y, **kwargs):
print(x, y, kwargs)
func()
func(x=1, y=2)
func(x=1,y=2,c=3,z=4,b=5)
"""
**号在形参中的使用
用于接收多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
"""
2. 可变长关键字实参
def index(**kwargs):
print(kwargs)
d1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
index(**d1)
"""
**号在实参中使用会将字典内的元素打散成关键字参数的形式一一传值
"""
加强版可变长参数
1. 无论函数传入多少位置参数和关键字参数都可以正常运行
def func(*args, **kwargs):
print(args, kwargs)
func()
func(1,2,3,4)
func(a=1, b=2, c=3, d=4)
func(1,2,3,a=4,b=5,c=6)
"""
墨守成规
可变长形参 *与**后面的变量名其实是可以随便定义的
但是python中推荐使用
*args
**kwargs
"""
函数参数的补充(了解)
命名关键字参数
def func(a,b,*,c,d):
print(a, b, c, d)
func(1,2,3,4)
func(1,2,3,d=5,c=4)
"""
c, d在传值时必须以关键字参数的形式传入,不然就是报错,因为多出来位置参数都会被*号接收
ps:基本不用,也基本见不着
"""
总结
函数参数可以从定义和调用阶段分为两个类型: 形参和实参
也可以从传入方式分为两个类型; 位置参数和关键字参数
使用时应当遵循以下原则:
1.位置参数必须在关键字参数前面,*必须在**前面
2.* 和 ** 后面可以时任意变量名 但是规范是 args 和 kwargs
即: ()
def func(a,b,*args,c=1,d=2,**kwags):
pass
func(a,b,*args,c=1,d=2,**kwags)
小窍门:
'''格式越简单的越靠前 格式越复杂的越靠后'''