8

在 Python 中,如果你有字典

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

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

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

func(**d)

但是,如果相反,我想func使用下面定义的 namedtuple 进行调用:

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

这个的语法是什么?

4

1 回答 1

14

一个 namedtuple 实例有一个._asdict()方法

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
于 2013-10-31T13:07:39.240 回答