似乎在不指定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)
最佳答案
默认值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,并且期望结果始终是一个列表。关于python - 在python argparse中,是否有一个用例为nargs = 1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37868384/