def f(a=2, **b):
print(a,b)
f(**{'a':3})為什么這個打印3 {}而不是2 {'a': 3}?我能理解為什么它會打印3 {}出來,f(a=3)但我不明白這種情況下的輸出。
2 回答

慕桂英4014372
TA貢獻1871條經(jīng)驗 獲得超13個贊
拆包運算符在字典上使用時,會將字典的內(nèi)容作為關(guān)鍵字參數(shù)傳遞。
換句話說,以下兩行在功能上是相同的:
f(a=3) f(**{'a':3})
由于is作為關(guān)鍵字參數(shù)顯式a
傳遞,因此 的默認值被覆蓋。由于沒有傳遞其他參數(shù),因此該參數(shù)為空。2
**b

青春有我
TA貢獻1784條經(jīng)驗 獲得超8個贊
調(diào)用f(**{'a':3})
與 相同f(a=3)
,所以 的值為a
3 而不是默認的 2。對于b
,使用解包操作符**
,意味著將其他所有映射變量保存到其中,因為沒有人,它的值為空字典
a
是 3b
是空字典,{}
所以它打印3 {}
要使用b
您需要傳遞以不同方式命名的參數(shù)a
# both print: 3 {'foo': 'bar', 'number': 100}
f(**{'a':3, 'foo':'bar', 'number':100})
f(a=3, foo='bar', number=100)
添加回答
舉報
0/150
提交
取消