設定
假設我有一個功能:
def variadic(*args, **kwargs):
print("Positional:", args)
print("Keyword:", kwargs)
僅出于實驗目的,我將其稱為以下內容:
variadic({'a':5, 'b':'x'}, *{'a':4, 'b':'y'}, **{'a':3, 'b':'z'})
輸出:
Positional: ({'a': 5, 'b': 'x'}, 'a', 'b')
Keyword: {'a': 3, 'b': 'z'}
問題
我對關鍵字引數沒有問題。
然而,對于位置的,我們得到 tuple ({'a': 5, 'b': 'x'}, 'a', 'b')
。我理解為什么我們得到第一個元素 ( {'a': 5, 'b': 'x'}
),但令我驚訝的是我們只從 中得到鍵 ( a
, b
) {'a':4, 'b':'y'}
。我不明白為什么會這樣。我想我預計將字典傳遞給會出錯*args
。
可能的答案?
我一直沒能找到答案,但懷疑在決議*args
Python 時做了一些事情:
for arg in args:
do something
并且由于我們傳遞了一個字典,并且像這樣迭代一個字典(而不是d.items()
)只給了我們鍵,我們就得到了鍵。任何人都可以確認或澄清為什么會這樣嗎?
uj5u.com熱心網友回復:
在函式呼叫中,以 a 為前綴的引數*
必須是可迭代值。通過迭代引數產生的每個值作為單獨的位置引數提供給函式。(請注意,這獨立于以 a為前綴的*
引數,它將未分配給任何其他引數的位置引數收集到一個元組中。)
型別的值dict
是可迭代的;a 的迭代器dict
產生的鍵。dict
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/537601.html
上一篇:有沒有一種優雅的方法可以將一個引數從function1()向下傳遞給一個需要多個引數的function2()?
下一篇:如何在R中的函式內部使用函式?