在里面
argparse
术语,有
positionals
和
optionals
. 这个
?
positional
不是必需的(可选),但它仍然是
. 相反地
optional
可能有
required=True
参数,但它仍然是一个
,在拿旗的意义上。是的,这个术语很难理解,但它有着悠久的历史,我们被它所束缚。为了避免混淆,我喜欢谈论
flagged
而不是
期权
.
这个
=
输入仅适用于标记的参数,例如:
In [68]: parser = argparse.ArgumentParser();
In [69]: parser.add_argument('-k', nargs='?')
Out[69]: _StoreAction(option_strings=['-k'], dest='k', nargs='?', const=None, default=None, type=None, choices=None, help=None, metavar=None)
In [70]: parser.add_argument('--split', nargs='?');
In [71]: parser.parse_args('-k=7 --split=9'.split())
Out[71]: Namespace(k='7', split='9')
根据你的定义,
k
split
仍然是位置参数,即使使用
?
nargs
python3 create.py 7 9
只用一根绳子
python3 create.py 7
K
获取一个值;
分裂
获取默认值。有了位置,设置是不可能的
而不是
K