关于Python函数的参数位置问题

 一、对位置规则的阐述  

     概括来说,Python函数调用时,实参表由左到右就是简单的两个部分

funcname(【位置实参】,【关键字实参】)

    注意这个前后顺序是严格的,两个部分都可以缺省,但不能相互交错!(超级重要)

   函数定义时,所有形参由逗号分隔,这些变量用于接收函数调用时传入的具体数据,其作用域为该函数内部,与主程序不冲突。完整地说,形参表从左到右可以分为五个部分。

def funcname(【限定位置形参】,【普通形参】,【特殊形参*args】,【限定关键字形参】,【特殊形参**kwargs】) :

   按最简形式定义出来的就是【普通形参】,它们是“位置、关键字兼容的”!

其中,两个特殊形参只能是0或1个,其他形参可以是0或多个,这个顺序同样是严格的,不同部分不能交错放置。

二、对特殊形参的解释

1.*args

    args接受调用时,当所有限定位置形参和普通形参都匹配完后,把剩余的位置实参封装成一个元组,你可以在函数内部通过args这个变量名使用它。

2.**kwargs

   kwargs接收所有在调用时未匹配成功的关键字参数,并封装成一个字典。形参名变成字符串形式的键,实参成为相应键对应的值,你可以在函数内部通过kwargs这个变量使用它。

三、函数调用时的补充说明

    再次强调,尽管函数定义的形式如此丰富,调用形式永远是之前提到的简单的前后两部分——位置实参+关键字实参。这里明确下参数传递的基本规则。

与有无默认值无关,位置实参永远按位置传给*或*args之前对应的形参(即限定位置参数和普通形参),多余的位置实参传入*args(如果有的话),关键字实参则匹配剩下的普通形参和限定关键字形参,多余的关键字实参则传入**kwargs(如果有的话)。

四、默认参数(形参默认值)

   首先我们明确一点,默认值是设给形参的。

   其二,默认值的使用并不受限于形参究竟是位置的还是关键字的。

   默认值的设定规则:

1.两个特殊形参*args和*kwargs不能设定默认值(或者可以理解为它们默认值是空元组和空字典)

2.默认值可以从限定位置形参或普通形参中的任意一个开始设定,这时须将后面剩下的所有限定位置形参和普通形参都默认限定关键字形参的默认值可以随意设定,无需考虑顺序问题。也就是说,在遵循上述规则的前提下,除了限定关键字形参,所有带默认值的形参必须位于无默认值的形参之后。

3.建议为所有限定关键字形参都设上默认值

   

    默认值设置的常见错误:

1.强烈建议使用不可变对象,如整数、浮点数、字符串、True、False、None 等类型或以上类型组成的元组等设定默认值。因为默认值只会在函数定义时被设定一次,如果是可变对象,一旦在函数内部被原地修改,效果会保留至以后每次的函数调用,不会被重新初始化。

2.如果非得使用某个可变对象作为默认值,比如列表,或者要设定依赖于其它参数的默认值,建议设成None,并写成类似这样的代码:

def func(x,default=None):
    if default is None:
       default = []
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3.有默认值的形参名,最好具有明显的含义,容易让人记住。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值