Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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_Parameter Passing_Argparse - Fatal编程技术网

Python-Argparse:可以重写的默认图形

Python-Argparse:可以重写的默认图形,python,python-3.x,parameter-passing,argparse,Python,Python 3.x,Parameter Passing,Argparse,让我们有一个以数字作为输入的程序。尽管如此,可以指定基准。未指定时,数字以十进制为基数 #十进制10 /获取数量比10 #10英寸八进制 /获取数量py-o 12 #10二进制 /获取\u num.py-b 1010 我想使用Python Argparse模块,但找不到实现此结果的方法。我知道有一个选项可以使用,但这并不适合,因为需要始终指定base 型号代码: 我想这正是你想要的。您不需要在互斥组中指定基数,默认情况下required=false import argparse pars

让我们有一个以数字作为输入的程序。尽管如此,可以指定基准。未指定时,数字以十进制为基数

#十进制10
/获取数量比10
#10英寸八进制
/获取数量py-o 12
#10二进制
/获取\u num.py-b 1010
我想使用Python Argparse模块,但找不到实现此结果的方法。我知道有一个选项可以使用,但这并不适合,因为需要始终指定base

型号代码:


我想这正是你想要的。您不需要在互斥组中指定基数,默认情况下required=false

import argparse

parser = argparse.ArgumentParser(prog='PROG')
group = parser.add_mutually_exclusive_group()
group.add_argument('-b', action='store_true')
group.add_argument('-o', action='store_true')
parser.add_argument('num', help='number')

args=parser.parse_args()

base=10  # default base
if args.b:
    base=2
elif args.o:
    base=8
# add other bases as required

print(int(args.num, base=base))
产出

run get_num.py -b 1010
10

run get_num.py -o 12
10

run get_num.py 10
10

run get_num.py -b -o 12
usage: PROG [-h] [-b | -o] num
PROG: error: argument -o: not allowed with argument -b
An exception has occurred, use %tb to see the full traceback.

SystemExit: 2

使用
dest
action='store_const'
const
选项在
argparse
中添加参数,可以执行以下操作:

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
parser.add_argument('value', help='Value')
group.set_defaults(base=10)
group.add_argument('-b', dest='base', action='store_const', const=2,
                   help="Use base 2")
group.add_argument('-o', dest='base', action='store_const', const=8,
                   help="Use base 8")

args = parser.parse_args()

print("Value {value}, base {base}".format(value=args.value, base=args.base))
结果如下:

$ python base.py 100
Value 100, base 10
$ python base.py 100 -b
Value 100, base 2
$ python base.py 100 -b2
usage: base.py [-h] [-b | -o] value
base.py: error: argument -b: ignored explicit argument '2'
$ python base.py 100 -o
Value 100, base 8
$ python base.py 100 -o -b
usage: base.py [-h] [-b | -o] value
base.py: error: argument -b: not allowed with argument -o

您也可以考虑使用<代码> -Base< /Cord>选项,而使用整数值(默认值10)。对我来说,这使您的程序更清晰、更简单:

parser = argparse.ArgumentParser()
parser.add_argument('value', help='Value')
parser.add_argument('-B', '--base', type=int, default=10,
                   help="Base to use")

如果你把基数放在一个条件中呢<代码>如果基:并创建一个默认模板您的意思是
base
将是位置的,
octall
binary
是可选的?没有任何基可以是可选的。但您可以编写一个条件来检查base是否通过。如果未通过,则启动基础。发布你的代码,我会看看我是否可以添加你需要的东西。这是一个模型问题,所以没有太多的代码。但我会写
parser = argparse.ArgumentParser()
parser.add_argument('value', help='Value')
parser.add_argument('-B', '--base', type=int, default=10,
                   help="Base to use")