在python argparse中,是否有一个用例为nargs = 1?

pen*_*ant 14 python argparse

似乎总是更有意义的是使用默认操作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=Nonenargs=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个,并且期望结果始终是一个列表.