Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Namspace创建namedtuple?_Python_Python 2.7_Argparse_Namedtuple - Fatal编程技术网

Python 从Namspace创建namedtuple?

Python 从Namspace创建namedtuple?,python,python-2.7,argparse,namedtuple,Python,Python 2.7,Argparse,Namedtuple,如何从中初始化 如果只有一些脚本参数进入namedtuple,我该怎么办? 以下是我的想法: nt_param=nt(**{f:getattr(args,f,None) for f in nt._fields}) 是否有更具python风格的方法?如果您不关心namedtuple的实际类型,那么可以创建一个“匿名”namedtuple来表示您的名称空间 以下是我以前使用过的一种方法: def auto_namedtuple(classname='auto_namedtuple', **kwar

如何从中初始化

如果只有一些脚本参数进入namedtuple,我该怎么办?

以下是我的想法:

nt_param=nt(**{f:getattr(args,f,None) for f in nt._fields})

是否有更具python风格的方法?

如果您不关心namedtuple的实际类型,那么可以创建一个“匿名”namedtuple来表示您的
名称空间

以下是我以前使用过的一种方法:

def auto_namedtuple(classname='auto_namedtuple', **kwargs):
    return collections.namedtuple(classname, tuple(kwargs))(**kwargs)
在您的情况下的用法:

nt = auto_namedtuple(**vars(args))

“如果程序的所有参数都在nt中,我可以将namespace=nt()传递给parser.parse_args()。”除非您不能,因为namedtuples是immutable@AnthonySottile:谢谢,已删除。一个小的改进是删除对
getattr
的调用中的
None
。由于
名称空间
对象已将任何未定义的命令行参数设置为
,因此您不必自己显式返回
。-询问如何将命名空间转换为不可变。除了复制到
namedtuple
之外,我建议使用一个自定义
名称空间
类。我还讨论了中的
namedtuple
namedtype
的可变替代。重要的是
namedtuple
只包含特定的字段。您所做的似乎很好,您是否有特定的问题?不是真的,我只是想看看我是否在做傻事。谢谢你的帮助!请注意,虽然
\u fields
有一个前导下划线,但它实际上不是“private”属性,stdlib会这样做
nt = auto_namedtuple(**vars(args))