似乎总是更有意义的是使用默认操作store而不指定,nargs因此输出总是如预期的那样,而不是有时是a list,有时不是.如果我错过了什么,我只是很好奇..
例
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('--bar', nargs=1)
_StoreAction(option_strings=['--bar'], dest='bar', nargs=1, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args('--foo 1 --bar 1'.split())
Namespace(bar=['1'], foo='1')
>>> parser.parse_args('')
Namespace(bar=None, foo=None)
Run Code Online (Sandbox Code Playgroud)
hpa*_*ulj 18
默认值nargs=None和nargs=1期望值都是一个值,但nargs=1会将其放在列表中,例如
Namespace(foo='test')
Namespace(foo=['test'])
Run Code Online (Sandbox Code Playgroud)
nargs=3将需要3个值,并将它们放在一个列表中. *并将+值放在列表中.
从文档中,在nargs=N:https:
//docs.python.org/3/library/argparse.html#nargs
请注意,nargs = 1会生成一个项目的列表.这与默认情况不同,默认情况下,项目由其自身生成.
nargs=1只是一个例子nargs=n.这不是一个特例.
对于您,作为argparse用户,您可能不需要使用1.事实上对我来说这是一个新手的标志 - 除非输出中明确需要列表.我可以想象,例如,构建一个以编程方式设置n为某个数字的解析器,可能是3个,可能是5个,也许是1个,并且期望结果始终是一个列表.