在Python中,如果你有一本词典
d = {'foo': 1, 'bar': False}
您可以将此应用于接受foo
和bar
关键字参数的函数
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
这是什么语法?
答案 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