【Python3.8 官方文档4.7.3.4】位置参数 name 和 **kwds 之间由于存在关键字名称 name 而可能产生潜在冲突

在 Python3.8 的官方文档中的 4.7.3.4 的一个示例中:

摘自原文:

最后,请考虑这个函数定义,它的位置参数 name 和 **kwds 之间由于存在关键字名称 name 而可能产生潜在冲突:

def foo(name, **kwds):
    return 'name' in kwds

任何调用都不可能让它返回 True,因为关键字 'name' 将总是绑定到第一个形参。

 

起初并不太理解这个函数,为什么说“任何调用都不可能让它返回 True”。

在学习了 * 和 ** 的函数调用时的解包时,才明白。

如果函数按如下方式调用的话:

foo(1,**{'name':2})

粗劣一看,name 应该在 kwds 参数中,但实际上在 {'name':2} 被解包之后,就变成了 name = 2

这时候,形参 name 先被赋值了 1,现在又赋值成 2,多次赋值会直接报错。若字典中不包含 name 则不报错,但是那样子就没办法满足 'name' in kwds 这个条件,也就无法返回 Ture

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值