为了账号安全,请及时绑定邮箱和手机立即绑定

为什么打印 `3 {}` 而不是 `2 {'a': 3}`?

为什么打印 `3 {}` 而不是 `2 {'a': 3}`?

慕容3067478 2023-05-16 15:50:18
def f(a=2, **b):     print(a,b) f(**{'a':3})为什么这个打印3 {}而不是2 {'a': 3}?我能理解为什么它会打印3 {}出来,f(a=3)但我不明白这种情况下的输出。
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

拆包运算符在字典上使用时,会将字典的内容作为关键字参数传递。

换句话说,以下两行在功能上是相同的:

f(a=3)
f(**{'a':3})

由于is作为关键字参数显式a传递,因此 的默认值被覆盖。由于没有传递其他参数,因此该参数为空。2**b


查看完整回答
反对 回复 2023-05-16
?
青春有我

TA贡献1784条经验 获得超8个赞

调用f(**{'a':3})与 相同f(a=3),所以 的值为a3 而不是默认的 2。对于b,使用解包操作符**,意味着将其他所有映射变量保存到其中,因为没有人,它的值为空字典

  • a是 3

  • b是空字典,{}

所以它打印3 {}


要使用b您需要传递以不同方式命名的参数a

# both print: 3 {'foo': 'bar', 'number': 100}

f(**{'a':3, 'foo':'bar', 'number':100}) 

f(a=3, foo='bar', number=100)


查看完整回答
反对 回复 2023-05-16
  • 2 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信