在没有指定store
的情况下使用nargs
的默认操作似乎总是更有意义,因此输出始终如预期,而不是有时是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)
答案 0 :(得分:14)
默认nargs=None
和nargs=1
都需要一个值,但nargs=1
会将其放入列表中,例如
Namespace(foo='test')
Namespace(foo=['test'])
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,并且期望结果始终是列表。
答案 1 :(得分:0)
对于我而言,nargs = 1的情况是我可以使用"追加"动作,然后如果我想使用该选项一次,我得到一个项目的列表,如果我使用它两次,我得到两个项目的列表等。