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

青春有我
TA贡献1784条经验 获得超8个赞
调用f(**{'a':3})
与 相同f(a=3)
,所以 的值为a
3 而不是默认的 2。对于b
,使用解包操作符**
,意味着将其他所有映射变量保存到其中,因为没有人,它的值为空字典
a
是 3b
是空字典,{}
所以它打印3 {}
要使用b
您需要传递以不同方式命名的参数a
# both print: 3 {'foo': 'bar', 'number': 100}
f(**{'a':3, 'foo':'bar', 'number':100})
f(a=3, foo='bar', number=100)
添加回答
举报
0/150
提交
取消