形式参数(形参)

在定义函数阶段定义的参数称之为形参,相当于变量名

地位形参(一般形参)

地位形参:在函数定义阶段,依照从左到右的程序定义
特点:必须被传值,且实参加形参依照程序一一对应,多一个少一个都不行!

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. \和\*在函数定义处应用
    1) \*:把多余的一般实参打包成元组
    2) \\:把多余的关键字实参打包成字典
  2. \和\*在函数调用处应用
    1) \*:对元组或列表进行解包
    2) \\:对字典进行解包
  3. \和\*同时在函数定义处和调用处应用
    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])

形参加实参的关系

  1. 在调用阶段,实参会绑定给形参
  2. 这种绑定关系只能在函数体内应用
  3. 实参加形参的绑定关系只在函数调用时失效,函数调用完结后解除绑定关系

总结

  1. 地位实参加关键字实参混合应用时,地位实参必须放在关键字实参后面(语法规定)
  2. 地位形参加默认形参混合应用时,地位形参必须在默认形参的右边
  3. 不能为同一形参反复传值
  4. 默认形参对应的实参可传可不传
  5. *args**kwargs混合应用时,*args必须写在**kwargs的后面,否则会报语法错误