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