参数类别
实参:实际上的参数
形参:形式上的参数
如上图,实际输入的参数为实参,在函数中占位置的参数为形参。
实参类型
1、位置实参
定义:调用的时候,需要根据位置传递实际参数
如图,Lion / Dog占了两个位置,期望是传递实参建议按照这个顺序,不然,即时能够接受,也不能正确的处理。(Lion的名字跟Dog的名字,因为传递错误,将导致不能正确识别)
2、关键字实参
定义:调用的时候,需要指定形参名称
如图,在调用的时候直接赋值,这种传递方式一目了然。
3、默认值实参
定义:在函数中,直接赋值给参数
如图,直接在函数定义一个默认值,在调用的时候,可以不传递,当然也可以传递。
形参类型
形参类型分为非关键字形参*args, 关键字形参**kwargs,先上代码体验一下,:
def func(*args, **kwargs):
print("-------------------------")
print('args is {}'.format(args))
print('kwarg is {}'.format(kwargs))
try:
print('firstArgs is {}'.format(args[0]))
print('firstKwarg is {}'.format(kwargs["a"]))
except:
pass
if __name__ == "__main__":
func(1, 2) # 元组
func(a=1, b=2, c=3, d=4) # 字典
func(1, 2, a=1, b=2) # 元组+字典
如上,我们了解了非关键字形参*args, 关键字形参**kwargs的用法。
非关键字形参:用于接收不含关键字的输入数据(如:1,2,3),会以元组的形式进入函数;
非关键字形参:用于接收含有关键字的输入数据(如:key=1中的key),会以字典的形式进入函数;
注意事项:
1、*args, **kwargs可单独存在
2、*args, **kwargs同时存在时,函数定义的形参,*args形参必须在前
3、*args, **kwargs同时存在时,传递实参的顺序,*args实参必须在前
4、取值方式:
*args可通过列表取值方式,如:args[0]
**kwargs可通过字典取值方式,如:kwargs[“key”]
5、参数扩展:可以跟普通形参一起使用,如:func(a,b,c=“name”,*args, **kwargs)