2009-10-13 28 views
24

我有一個接受通配符關鍵字參數的函數:如何發送字典到接受** kwargs的函數?

def func(**kargs): 
    doA 
    doB 

如何發送它的字典?

+1

[轉換Python的字典來kwargs?]的可能重複(http://stackoverflow.com/questions/5710391/converting-python-dict -to-kwargs) – Olli 2014-02-01 21:02:47

回答

49

只需使用func(**some_dict)調用它。

這記錄在section 4.7.4 of python tutorial上。

注意,相同dict傳遞給函數。一個新的副本被創建,所以some_dict is not kwargs

+0

_「創建一個新副本」_ - 我在哪裏可以找到這種行爲的官方文檔? – jan 2017-11-10 12:39:41

5

func(**mydict)

,這將意味着kwargs = mydict在函數內部

所有mydict的鑰匙必須是字符串

7

這不是100%由你的問題不清楚,但如果你想通過kwargs傳遞dict,你只是使快譯通另一字典的一部分,就像這樣:

my_dict = {}      #the dict you want to pass to func 
kwargs = {'my_dict': my_dict } #the keyword argument container 
func(**kwargs)      #calling the function 

然後你可以在功能趕my_dict

def func(**kwargs): 
    my_dict = kwargs.get('my_dict') 

或...

def func(my_dict, **kwargs): 
    #reference my_dict directly from here 
    my_dict['new_key'] = 1234 

我使用後者很多,當我有相同的選項傳遞給不同的功能,但一些功能只使用一些選項(我希望這是有道理的...)。 但是,當然有一百萬種方法可以解決這個問題。如果您對問題有所闡述,我們很可能會更好地幫助您。

0

爲Python 3.6剛剛把**字典名稱前

def lol(**kwargs): 
    for i in kwargs: 
     print(i) 

my_dict = { 
    "s": 1, 
    "a": 2, 
    "l": 3 
} 

lol(**my_dict)