形参的分类可以分为六种:
实例:
def fn(a,b,c=10,*,d,e=20,**kwargs)
实例中,在 * 号之前统称为位置形参,位置形参可以由位置实参及关键字实参进行传值。
不带默认值的位置形参:不带有默认值的位置形参必须要实参进行传值,如果实参不传值就会报错
带有默认值的位置形参:带有默认值的关键字位置实参可以用实参进行传值,也可以不使用实参进行传值,不使用实参进行传值时,使用默认值作为其值
实例中 * 以后的参数都是关键字形参,在使用关键字形参时,必须使用关键字实参进行传值,不使用会报错
不带默认值的关键字形参:不带有默认值的关键字形参必须使用关键字实参进行传值,如果不传参数就会报错
带有默认值的关键字形参:带有默认值的关键字形参可以用关键字实参进行传值,也可以不传值,不传值时使用默认值作为其值。
可变长度位置形参:
可变长度的关键字形参:
形参声明时,其声明顺序是有规定的,顺序为:
无默认值位置形参 --> 有关键字位置形参 --> 可变长度的位置形参 --> 无默认值的关键字形参 --> 有默认值的关键字形参 --> 可变长度的关键字形参
常用的参数列表类型:
-- (*args,**kwargs)
-- (a,*args)
-- (a,b=10,**kwargs)
-- (a,*,b,**kwargs)
-- (a,*args,b,**kwargs)
在使用形参时要按照位置进行传参,即使是有关键字也要尽量按照位置进行传参,这样更加清晰
在使用可变长形参时,当传入的值多余需要的值时会把多余的参数放进可变长位置形参 及 可变长关键字形参,但是如果直接传入一个元组及字典中如何直接将其变为元组及字典呢?
此时需要使用 *
及 **
的打散机制*
单列容器 会打散单列容器
**
双列容器 会打散双列容器
print(*(a,b,c)) --- > (a b c)
print(**{a:1,b:2}) --- > {a:1,b:2}
全部0条评论
快来发表一下你的评论吧 !