Python argparse:默认值或指定值

Rob*_*Rob 150 python default-value 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
Run Code Online (Sandbox Code Playgroud)

我可以创建一个动作,但想知道是否有现成的方法来执行此操作.

unu*_*tbu 240

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--example', nargs='?', const=1, type=int)
args = parser.parse_args()
print(args)
Run Code Online (Sandbox Code Playgroud)
% test.py 
Namespace(example=None)
% test.py --example
Namespace(example=1)
% test.py --example 2
Namespace(example=2)
Run Code Online (Sandbox Code Playgroud)
  • 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)
Run Code Online (Sandbox Code Playgroud)

然后

% test.py 
Namespace(example=1)
Run Code Online (Sandbox Code Playgroud)

  • 当心; 如果您尝试使用位置参数 **之后**,第一个位置参数将成为 `--example` 的值(如果它没有明确的值)。只花了 10 分钟调试! (4认同)
  • 有没有办法让它接受可选的 int 并仍然区分位置字符串参数? (2认同)

Ada*_*son 42

实际上,您只需要在此脚本中使用defaultto add_argumentas参数test.py

import argparse

if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--example', default=1)
    args = parser.parse_args()
    print(args.example)
Run Code Online (Sandbox Code Playgroud)
test.py --example
% 1
test.py --example 2
% 2
Run Code Online (Sandbox Code Playgroud)

详细信息在这里


小智 29

和...之间的不同:

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

parser.add_argument("--debug", help="Debug", nargs='?', type=int, const=1)
Run Code Online (Sandbox Code Playgroud)

是这样的:

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

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

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

  • 描述这种差异的绝佳方式 (4认同)