如何将一个namedtuple应用于函数?

时间:2013-10-31 13:02:58

标签: python function call namedtuple

在Python中,如果你有一本词典

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

您可以将此应用于接受foobar关键字参数的函数

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

func(**d)

但如果相反,我想用下面定义的namedtuple调用func

from collections import namedtuple
Record = namedtuple('Record', 'foo bar')
r = Record(foo=1, bar=False)
func(r)   # !!! this will not work

这是什么语法?

1 个答案:

答案 0 :(得分: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