在 python argparse 中,是否有 nargs=1 的用例?

In python argparse, is there a use case for nargs=1?

似乎在不指定 nargs 的情况下使用 store 的默认操作似乎总是更有意义,因此输出总是符合预期,而不是有时是 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)                                                                                                           

默认的 nargs=Nonenargs=1 都需要一个值,但是 nargs=1 会把它放在一个列表中,例如

Namespace(foo='test')
Namespace(foo=['test'])

nargs=3 将需要 3 个值,并将它们也放在一个列表中。 *+ 也将值放在列表中。

来自文档,在 nargs=N 下: https://docs.python.org/3/library/argparse.html#nargs

Note that nargs=1 produces a list of one item. This is different from the default, in which the item is produced by itself.

nargs=1 只是 nargs=n 的一个实例。这不是特例。

对于您来说,作为 argparse 用户,您可能不需要使用 1。事实上,对我来说,这是新手的标志——除非明确需要输出中的列表。我可以想象,例如,构建一个以编程方式将 n 设置为某个数字的解析器,可能是 3、可能是 5、可能是 1,并期望结果始终是一个列表。

对我来说 nargs=1 的情况是我可以将它与 "append" 操作一起使用,然后如果我想使用该选项一次,我会得到一个项目的列表,如果我使用它的话两次,我得到了两个项目的列表,等等