nargs
ArgumentParser 对象通常关联一个单独的命令行参数到一个单独的被执行的动作。 nargs 命名参数关联不同数目的命令行参数到单一动作。支持的值有:
N (一个整数),命令行中的 N 个参数会被聚集到一个列表中。nargs=1 会产生一个单元素列表。这和默认的元素本身是不同的。(这个列表可以拿来做什么呢?)
'?'。如果可能的话,会从命令行中消耗一个参数,并产生一个单一项。如果当前没有命令行参数,则会产生 default 值。注意,对于选项,有另外的用例 - 选项字符串出现但没有跟随命令行参数,则会产生 const 值。nargs='?' 的一个更普遍用法是允许可选的输入或输出文件。一些说用用例:(看不懂....
'*'。所有当前命令行参数被聚集到一个列表中。注意通过 nargs='*' 来实现多个位置参数通常没有意义,但是多个选项是可能的。(这个和整数N又有什么差别和联系?)
'+'。和 '*' 类似,所有当前命令行参数被聚集到一个列表中。另外,当前没有至少一个命令行参数时会产生一个错误信息。(具体用途??)
如果不提供 nargs 命名参数,则消耗参数的数目将被 action 决定。通常这意味着单一项目(非列表)消耗单一命令行参数。
const
add_argument() 的``const`` 参数用于保存不从命令行中读取但被各种 ArgumentParser 动作需求的常数值。最常用的两例为:
当 add_argument() 通过 action='store_const' 或 action='append_const 调用时。这些动作将 const 值添加到 parse_args() 返回的对象的属性中。
当 add_argument() 通过选项(例如 -f 或 --foo)调用并且 nargs='?' 时。这会创建一个可以跟随零个或一个命令行参数的选项。当解析命令行时,如果选项后没有参数,则将用 const 代替。
对 'store_const' 和 'append_const' 动作, const 命名参数必须给出。对其他动作,默认为 None。(需要了解什么时候执行const参数的内容?)
default
所有选项和一些位置参数可能在命令行中被忽略。add_argument() 的命名参数 default,默认值为 None,指定了在命令行参数未出现时应当使用的值。
如果 default 值是一个字符串,解析器解析此值就像一个命令行参数。特别是,在将属性设置在 Namespace 的返回值之前,解析器应用任何提供的 type 转换参数。否则解析器使用原值。
对于 nargs 等于 ? 或 * 的位置参数, default 值在没有命令行参数出现时使用。
>>> parser=argparse.ArgumentParser()
>>> parser.add_argument('foo',nargs='?',default=42)
>>> parser.parse_args(['a'])Namespace(foo='a')
>>> parser.parse_args([])Namespace(foo=42)
提供 default=argparse.SUPPRESS 导致命令行参数未出现时没有属性被添加:
>>> parser=argparse.ArgumentParser()
>>> parser.add_argument('--foo',default=argparse.SUPPRESS)
>>> parser.parse_args([])Namespace()
>>> parser.parse_args(['--foo','1'])Namespace(foo='1')