Python argparse:默认值或指定值

我希望有一个可选参数,如果只有标志存在而没有指定值,则默认为一个值,但如果用户指定了一个值,则存储用户指定的值,而不是默认值。是否已经有相应的操作?

一个例子:

python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2

我可以创建一个动作,但想看看是否有现有的方法来做到这一点。

269902 次浏览
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)

% test.py
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)

  • nargs='?'表示0或1个参数
  • 当有0个参数时,const=1设置默认值
  • type=int将实参转换为int

如果你想要test.pyexample设置为1,即使没有指定--example,那么包括default=1。也就是说,

parser.add_argument('--example', nargs='?', const=1, type=int, default=1)

然后

% test.py
Namespace(example=1)

两者的区别:

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1, default=7)

而且

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)

是这样:

myscript.py => debug在第一种情况下为7(默认值),在第二种情况下为“None”

myscript.py --debug => debug在每种情况下都是1

myscript.py --debug 2 => debug在每种情况下都是2