python按位置参数调用_python函数中参数调用的细节

Python牛*的地方之一就是函数的参数十分花哨,非关键字参数,关键字参数,*name元组,**name字典,混合起来使用稍有不慎都可能引起不可预见的错误。来排雷一波~

函数定义函数头参数顺序

在函数头部,参数必须以此顺序出现:任何一般参数(name),紧跟着任何默认参数(name=value),如果有的话,后面是*name的形式,后面跟着任何name或name=value keyword-only参数,后面跟着**name形式。(必须这样做,不是建议)

例如:第一行因顺序不对报错

177045673_1_20191202085957641.jpeg

函数调用参数顺序

在函数调用中,参数建议以此顺序出现:任何位置参数(value),后面跟着任何关键字参数(name=value)和*sequence形式的组合,后面跟着**dict形式。(就按这种方式,虽说不按这种方式有时也可能对,如上面最后一行代码)

运行结果

177045673_2_20191202085957704.jpeg

而这行语句就会报错:

func(1,c=2,3,4,d=2,e=1)

# positional argument follows keyword argument (提示位置参数放在了关键字参数后)

函数传参匹配顺序

1.通过位置分配非关键字参数。

2.通过匹配变量名分配关键字参数。

3.其他额外的非关键字参数分配到*name元组中。

4.其他额外的关键字参数分配到**name字典中。

5.用默认值分配给在头部未得到分配的参数。

Keyword-only参数

我们可以指定keyword-only参数——即必须只按照关键字传递并且不会由一个位置参数来填充的参数。

从语法上讲,keyword-only参数编码为命名的参数,出现在参数列表中的*args之后。所有这些参数都必须在调用中使用关键字语法来传递。例如,在如下的代码中,a可能按照名称或位置传递,b收集任何额外的位置参数,并且c必须只按照关键字传递:

177045673_3_20191202085957782.jpeg

出现在*后面的必须指定关键字。

177045673_4_20191202085957829.jpeg

加个餐

超级无敌加法函数,不管你列表还是元组套的有多深,只要有数就加上去,*args语法糖真的很甜:

177045673_5_20191202085957876.jpeg

著作权归作者所有

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值