Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Argparse可选参数,如果未指定值,则具有不同的默认值_Python_Python 3.x_Argparse - Fatal编程技术网

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
结合在一起非常棒!