形式参数(形参)
在定义函数阶段定义的参数称之为形参,相当于变量名
地位形参(一般形参)
地位形参:在函数定义阶段,依照从左到右的程序定义
特点:必须被传值,且实参加形参依照程序一一对应,多一个少一个都不行!
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
的后面,否则会报语法错误