2013-10-31 11 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

相关问题