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

时间:2020-08-12 21:01:52

标签: python keyword-argument argument-unpacking

def f(a=2, **b):
    print(a,b)

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

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

我可以理解为什么打印3 {}时会打印f(a=3),但在这种情况下我不理解输出。

2 个答案:

答案 0 :(得分:3)

解包运算符用于字典时,会将字典的内容作为关键字参数传递。

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

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

由于a作为关键字参数明确地传递了{em},因此2的默认值被覆盖。而且由于没有传递其他参数,因此**b参数保留为空。

答案 1 :(得分:1)

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

  • **是3
  • a是空字典,b

因此它打印{}


要使用3 {},您需要传递名称为b的自变量

a