250

我想要一个可选参数,如果仅存在未指定值的标志,则默认为一个值,但如果用户指定一个值,则存储用户指定的值而不是默认值。是否已经有可用的操作?

一个例子:

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

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

4

2 回答 2

363
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 个参数
  • const=1当有 0 个参数时设置默认值
  • type=int将参数转换为 int

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

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

然后

% test.py 
Namespace(example=1)
于 2013-03-08T18:52:43.553 回答
51

和...之间的不同:

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

于 2020-02-04T01:50:27.623 回答