形式参数(形参)
在定义函数阶段定义的参数称之为形参, 相当于变量名
地位形参(一般形参)
地位形参:在函数定义阶段, 依照从左到右的程序定义
特点:必须被传值, 且实参加形参 依照程序一一对应, 多一个少一个都不行!
def func():
pass
默认形参
默认形参:在函数定义阶段, 就曾经被赋值的参数
def func(x, y=1):
pass
一般收集形参
一般收集形参:用于接管多出局部的地位实参, 溢出的局部会被 保留成元组类型, 而后赋值给 前面的形参接管
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)
理论参数(实参)
在调用函数阶段定义的参数称之为实参, 相当于变量值
地位实参(一般实参)
地位实参:在函数调用阶段, 依照从左到右的程序顺次传入的值
特点:实参加形参 依照程序一一对应
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)
\和* 的应用
- \和 \* 在函数定义处应用
1) \*:把多余的一般实参打包成元组
2) \\:把多余的关键字实参打包成字典 - \和 \* 在函数调用处应用
1) \*:对元组或列表进行解包
2) \\:对字典进行解包 - \和 \* 同时在函数定义处和调用处应用
1) 先解包变成地位形参
2) 再将多余的地位形参打包
# 示例一
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
的后面, 否则会报语法错误