Python Argparse可选参数,如果未指定值,则具有不同的默认值
考虑程序的三种不同运行:Python Argparse可选参数,如果未指定值,则具有不同的默认值,python,python-3.x,argparse,Python,Python 3.x,Argparse,考虑程序的三种不同运行: python3 prog.py python3 prog.py --x python3 prog.py --x 2 是否可以使用argparse,例如,在第一种情况下,x==None,在第二种情况下,x==1,在第三种情况下,x==2 sentinel = object() parser.add_argument('--x', nargs='?', type=int, default=sentinel) args = parser.parse_args() if ar
python3 prog.py
python3 prog.py --x
python3 prog.py --x 2
是否可以使用
argparse
,例如,在第一种情况下,x==None
,在第二种情况下,x==1
,在第三种情况下,x==2
sentinel = object()
parser.add_argument('--x', nargs='?', type=int, default=sentinel)
args = parser.parse_args()
if args.x is sentinel:
args.x = None
elif args.x is None:
args.x = 1
然而,它以一种有点奇怪的方式弯曲刀具。您可能需要考虑的是通常用来指定冗长级别的动作,例如(-V,-VV,-VVV)。p>
nargs'?'
带有const
参数,可以很好地处理此三向输入
In [2]: parser = argparse.ArgumentParser()
In [3]: parser.add_argument('-x','--x', nargs='?', type=int, const=1)
...
In [4]: parser.parse_args([])
Out[4]: Namespace(x=None)
In [5]: parser.parse_args(['-x'])
Out[5]: Namespace(x=1)
In [6]: parser.parse_args(['-x','2'])
Out[6]: Namespace(x=2)
我还可以给它一个default
参数
+1我不知道const的这个用法。如果可以的话,我会放弃复选标记,希望OP能看到这一点并改变他们接受的答案。这个
nargs='?'
与const
结合在一起非常棒!