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

时间:2016-06-16 20:00:14

标签: python argparse

在没有指定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)                                                                                                           

2 个答案:

答案 0 :(得分:14)

默认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

  

请注意,nargs = 1会生成一个项目的列表。这与默认情况不同,在默认情况下,项目由其自身生成。

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

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

答案 1 :(得分:0)

对于我而言,nargs = 1的情况是我可以使用"追加"动作,然后如果我想使用该选项一次,我得到一个项目的列表,如果我使用它两次,我得到两个项目的列表等。