我将用一个 Ipython 交互式会话演示 argparse
中 default
的正常行为。
In [32]: parser = argparse.ArgumentParser()
定义3个动作:
In [33]: parser.add_argument('-r', nargs=3, type=int, default=(1,2,3));
In [35]: parser.add_argument('-f', default='DEFAULT');
In [37]: parser.add_argument('-g', nargs='?', default='DEFAULT', const='const');
help
是一个命令。需要注意的是所有的操作都有[],表示它们是可选的:
In [39]: parser.print_help()
usage: ipython3 [-h] [-r R R R] [-f F] [-g [G]]
optional arguments:
-h, --help show this help message and exit
-r R R R
-f F
-g [G]
如果没有任何参数调用,则所有默认值均出现在
args
命名空间中。
In [40]: parser.parse_args([])
Out[40]: Namespace(f='DEFAULT', g='DEFAULT', r=(1, 2, 3))
使用-r
并提供3个数字(如nargs所指定的)
In [41]: parser.parse_args('-r 4 5 6'.split())
Out[41]: Namespace(f='DEFAULT', g='DEFAULT', r=[4, 5, 6])
请指定其他标志之一。注意其余默认值。
In [42]: parser.parse_args('-f other'.split())
Out[42]: Namespace(f='other', g='DEFAULT', r=(1, 2, 3))
-g
带有nargs='?'
的选项还有另一个选项。它可以不带参数给出。在这种情况下,它会获取const
值。
In [43]: parser.parse_args('-f other -g'.split())
Out[43]: Namespace(f='other', g='const', r=(1, 2, 3))
In [44]: parser.parse_args('-f other -g more'.split())
Out[44]: Namespace(f='other', g='more', r=(1, 2, 3))
nargs=3
没有三个选项的设置。你要么提供三个值,要么不使用
-r
。如果需要区分 1)没有 r 标志,2)带参数的 r 标志,以及 3)带有三个参数的 r 标志,我建议将功能拆分为两种操作,一种是“store_true”,另一种是接受三个值的操作。
argparse
中的默认值可能会很复杂,有多种设置方式,字符串和非字符串值之间存在差异,甚至还有一种抑制默认值的方式。但我已经展示了基本的行为。