我该如何从Namespace
初始化一个namedtuple
?
import collections
import argparse
nt=collections.namedtuple("nt",["foo","bar"]) # _NOT_ "baz"!
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.add_argument('--bar')
parser.add_argument('--baz')
args = parser.parse_args(...)
如果仅有一些脚本参数进入了namedtuple,该怎么办?
以下是我想到的解决方案:
nt_param=nt(**{f:getattr(args,f,None) for f in nt._fields})
有没有更Pythonic的方法?
getattr
时删除None
。由于Namespace
对象已经将任何未定义的命令行参数设置为None
,因此您不必显式地返回None
。 - Christian Deannamedtuple
之外,我建议使用自定义的Namespace
类。我还在https://dev59.com/wlgQ5IYBdhLWcg3wvGi4中讨论了`namedtuple`。 - hpauljnamedtype
的可变替代品。 - hpauljnamedtuple
。您不仅必须选择匹配的键,还必须为缺失的键定义默认值。您可以使用parser.set_defaults
来处理缺失的键问题。 - hpaulj