2008-12-02 161 views
217

我想在Python中使用字典調用函數。將字典傳遞給python中的函數作爲關鍵字參數

下面是一些代碼:

d = dict(param='test') 

def f(param): 
    print param 

f(d) 

這將打印{'param': 'test'}但我想它只是打印test

我想它更多的參數同樣的工作:

d = dict(p1=1, p2=2) 
def f2(p1,p2): 
    print p1, p2 
f2(d) 

這可能嗎?

回答

357

想通了爲自己到底。這很簡單,我只是缺少**操作解壓字典

所以我的例子就變成:

d = dict(p1=1, p2=2) 
def f2(p1,p2): 
    print p1, p2 
f2(**d) 
+29

如果你想要這個幫助別人,你應該重新說明你的問題:問題不是傳遞字典,你想要的是將字典轉換爲關鍵字參數 – Javier 2008-12-02 17:28:17

3

這裏亞去 - 工作只是任何其他迭代:

d = {'param' : 'test'} 

def f(dictionary): 
    for key in dictionary: 
     print key 

f(d) 
+0

似乎人們在回答原來的問題,而不是回答的問題時,正在對此進行壓制。我建議現在刪除這個帖子。 – dotancohen 2013-12-10 08:00:03

+0

@dotancohen不,它從來都不是正確的,它沒有通過問題的第二塊代碼。它從字面上看,印刷是一個例子。 – 2014-02-26 21:28:08

+0

它確實回答了這個問題,但它不是通過字典解包來完成的。根據發佈的問題,他的方法完全有效。 – Natecat 2016-11-30 01:19:20

25

在Python中,這就是所謂的「解包」,你可以找到一些關於它在tutorial。它的文檔很爛,我同意,特別是因爲它有多麼幻想有用。

14

一些額外的細節,可能有助於瞭解(問題我看完這個去和測試):

  1. 函數可以有包含在字典中的參數
  2. 您可以而不是覆蓋已存在於字典中的參數
  3. 字典可以而不是具有不在該函數中的參數。每個

實例:

In[3]: def test(a=4, b=2): 
    ...:  print a, b 
    ...:  

數1:該函數可以具有未包含在字典中的參數

In[6]: mydict = {'a': 100} 
In[7]: test(**mydict) 
100 2 

數量2:不能覆蓋已存在於字典中的參數

In[8]: mydict = {'a': 100, 'b': 200} 
In[9]: test(a=3, **mydict) 

TypeError: test() got multiple values for keyword argument 'a' 

編號3:字典中不能包含不在函數中的參數。

In[10]: mydict = {'a': 100, 'b': 200, 'c': 300} 
In[11]: test(**mydict) 

TypeError: test() got an unexpected keyword argument 'c' 
相關問題