在Python中,如果你有一本字典如何將一個namedtuple應用於函數?
d = {'foo': 1, 'bar': False}
您可以將此到由
def func(foo, bar):
# Do something complicated here
pass
func(**d)
接受foo
和bar
關鍵字參數但是如果相反,我想叫func
與功能名稱如下定義:
這是什麼語法?
在Python中,如果你有一本字典如何將一個namedtuple應用於函數?
d = {'foo': 1, 'bar': False}
您可以將此到由
def func(foo, bar):
# Do something complicated here
pass
func(**d)
接受foo
和bar
關鍵字參數但是如果相反,我想叫func
與功能名稱如下定義:
這是什麼語法?
一個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
您可能希望包含的參數數量也應該相同。 – thefourtheye
@thefourtheye:這也適用於字典應用爲關鍵字參數的情況;這對namedtuples並不特別。 –
是的。你是對的。 – thefourtheye
您的意思是'FUNC(* R)'在最後的代碼塊? – mr2ert
您是否嘗試過使用'func(* d)'?也就是說,試圖用它作爲可變參數而不是字典? – wheaties
mr2ert,寫這個答案,我會接受它。一個小實驗表明它們確實通過關鍵字匹配。 – fatuhoku