2013-10-31 28 views
5

在Python中,如果你有一本字典如何將一個namedtuple應用於函數?

d = {'foo': 1, 'bar': False} 

您可以將此到由

def func(foo, bar): 
    # Do something complicated here 
    pass 

func(**d) 

接受foobar關鍵字參數但是如果相反,我想叫func與功能名稱如下定義:

這是什麼語法?

+0

您的意思是'FUNC(* R)'在最後的代碼塊? – mr2ert

+0

您是否嘗試過使用'func(* d)'?也就是說,試圖用它作爲可變參數而不是字典? – wheaties

+0

mr2ert,寫這個答案,我會接受它。一個小實驗表明它們確實通過關鍵字匹配。 – fatuhoku

回答

10

一個namedtuple實例有一個._asdict() method

func(**r._asdict()) 

但如果namedtuple屬性是相同的順序作爲函數的參數,你可以只適用於它作爲一個序列,而不是:

func(*r) 

這裏,namedtuple的兩個值按順序應用於函數中的關鍵字參數。畢竟,這兩個論點可以作爲立場論點來解決!

爲您的樣品的功能,無論工作:

>>> def func(foo, bar): 
...  print foo, bar 
... 
>>> from collections import namedtuple 
>>> Record = namedtuple('Record', 'foo bar') 
>>> r = Record(foo=1, bar=False) 
>>> func(**r._asdict()) 
1 False 
>>> func(*r) 
1 False 
+0

您可能希望包含的參數數量也應該相同。 – thefourtheye

+0

@thefourtheye:這也適用於字典應用爲關鍵字參數的情況;這對namedtuples並不特別。 –

+0

是的。你是對的。 – thefourtheye

相關問題