形式参数(形参)
在定义函数阶段定义的参数称之为形参,相当于变量名
![cb754102f6b2cf316ad0a3718e9ffde9.png](https://i-blog.csdnimg.cn/blog_migrate/25374cdaf2fe5954afd0f1ba9adf13ef.jpeg)
位置形参(普通形参)
位置形参:在函数定义阶段,按照从左到右的顺序定义
特点:必须被传值,且实参与形参按照顺序一一对应,多一个少一个都不行!
def func():pass
默认形参
默认形参:在函数定义阶段,就已经被赋值的参数
def func(x, y=1):pass
![8732a75701f22d6a733cdb501d4f19f3.png](https://i-blog.csdnimg.cn/blog_migrate/b81b3e95fe0e3e9ac8772bd314e2281e.jpeg)
普通收集形参
普通收集形参:用于接收多出部分的位置实参,溢出的部分会被保存成元组类型,然后赋值给后面的形参接收
def func(x, y, *args):print(x, y)print(args)func(1, 2, 3, 4, 5, 6, 7, 78, 8, 89)
*后的形参名一般定义为args,为约定俗成
关键字收集形参
关键字收集形参:用于接收多出部分的关键字实参,溢出的部分会被**保存成字典类型,然后赋值给**后面的形参接收
def func(x, y, **kwargs):print(x, y)print(kwargs)func(a=1, b=2, c=3, x=4, y=5, z=6)
**后的形参名一般定义为kwargs,为约定俗成
命名关键字形参
命名关键字形参:在函数定义时,*后定义的参数,就是命名关键字参数
特点:命名关键字实参必须按照key=value的形式为其传参
# y=2是带有默认值的命名关键字形参,并非是默认形参,所以可以放置在z的前面def func(x, *, y=2, z):print(x)# 其中y和z就是命名关键字形参print(y, z)func(1, z=3)
![ed0227b8ee81cf68a14fa17b2dacfce5.png](https://i-blog.csdnimg.cn/blog_migrate/d876327fd46ea5be466b8e632107a0d3.jpeg)
实际参数(实参)
在调用函数阶段定义的参数称之为实参,相当于变量值
位置实参(普通实参)
位置实参:在函数调用阶段,按照从左到右的顺序依次传入的值
特点:实参与形参按照顺序一一对应
def func(x, y):print(x + y)func(1, 2)
关键字实参
关键字实参:在函数调用阶段,按照key=value的形式传入的值
特点:指定给具体的某个形参传值,可以不按照顺序传值
def func(x, y):print(x + y)func(y=1, x=2)func(x=2, y=1)
*和**的使用
- *和**在函数定义处使用*:把多余的普通实参打包成元组**:把多余的关键字实参打包成字典
- *和**在函数调用处使用*:对元组或列表进行解包**:对字典进行解包
- *和**同时在函数定义处和调用处使用先解包变成位置形参再将多余的位置形参打包
# 示例一def func(x, y, z):print(x, y, z)func(*[1, 2, 3])func(*(1, 2, 3))func(**{"x": 1, "y": 2, "z": 3})# 实例二def func(x, y, z, *args):print(x, y, z)print(args)func(5, 6, 7, *[1, 2, 3])
形参与实参的关系
- 在调用阶段,实参会绑定给形参
- 这种绑定关系只能在函数体内使用
- 实参与形参的绑定关系只在函数调用时生效,函数调用结束后解除绑定关系
总结
- 位置实参与关键字实参混合使用时,位置实参必须放在关键字实参前面(语法规定)
- 位置形参与默认形参混合使用时,位置形参必须在默认形参的左边
- 不能为同一形参重复传值
- 默认形参对应的实参可传可不传
- *args与**kwargs混合使用时,*args必须写在**kwargs的前面,否则会报语法错误
最后,小编想说:我是一名python开发工程师,整理了一套最新的python系统学习教程,
想要这些资料的可以关注私信小编“01”即可(免费分享哦)希望能对你有所帮助。