Python函数形参的分类

描述

形参的分类

形参的分类可以分为六种:

  • 带有默认值的位置形参
  • 不带默认值的位置形参
  • 带有默认值的关键字形参
  • 不带默认值的关键字形参
  • 可变长度的位置形参
  • 可变长度的关键字形参

实例:

def fn(a,b,c=10,*,d,e=20,**kwargs)

1、带及不带默认值的位置形参

实例中,在 * 号之前统称为位置形参,位置形参可以由位置实参及关键字实参进行传值。

不带默认值的位置形参:不带有默认值的位置形参必须要实参进行传值,如果实参不传值就会报错

带有默认值的位置形参:带有默认值的关键字位置实参可以用实参进行传值,也可以不使用实参进行传值,不使用实参进行传值时,使用默认值作为其值

2、带有及不带默认值的关键字形参

实例中 * 以后的参数都是关键字形参,在使用关键字形参时,必须使用关键字实参进行传值,不使用会报错

不带默认值的关键字形参:不带有默认值的关键字形参必须使用关键字实参进行传值,如果不传参数就会报错

带有默认值的关键字形参:带有默认值的关键字形参可以用关键字实参进行传值,也可以不传值,不传值时使用默认值作为其值。

3、可变长度的形参:

可变长度位置形参:

  • 其位置在位置形参及关键字形参之间,当传入的位置实参数量多于位置形参时,多出部分的位置形参会全部存储在可变长度的位置形参中
  • 可变长度的关键字形参就是例子中的 * ,只是给这个形参添加了一个名字,这个名字可以自定义,但是约定俗成的命名为 *args

可变长度的关键字形参:

  • 可变长度的关键字形参位于参数列表的末尾,当传入的关键字实参多与关键字形参时,多出的部分就会被储存在可变长度的关键字形参中,以元组进行存储
  • 可变长度的关键字形参使用 ** 进行表示,此时也需要给关键字形参添加一个名字,这个名字可以自定义,但是约定俗成的称为 **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}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分