argparse学习笔记

基本使用

  • argparse是一个Python模块,包括:命令行选项、参数和子命令解析器

  • 主要有三个步骤:

    (1)创建解析器:创建ArgumentParser()对象

    parser = ArgumentParser()   # 实例化一个ArgumentParser对象,用来装填main函数输入
    

    (2)添加参数:调用add_argument()方法添加参数

    ArgumentParser.add_argument(name or flags,[action],[nargs],[const],[default],[type],[choices],[required],[help],[metavar],[dest])
    
    

    其中各选项的意义如下:

    name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。【注意-会被解析为_,例如写'--resume-from'的时候,在后面的调用的时候,可以使用下划线来调用:args.resume_from】,例如:

    import argparse
    
    def paser_args():
        paser = argparse.ArgumentParser()
        paser.add_argument('--Num-count')	# 注意这里是短横杠
        args = paser.parse_args()
        return args
    
    if __name__ == '__main__':
        args = paser_args()
        print(args.Num_count)	# 注意这里是下划线,仍能够正常调用
    

    结果为:

    (torch) D:\研究生课程\数值分析\第二次作业>python temp.py --Num-count=2
    2
    

    action,当参数在命令行中出现时使用的动作基本类型,其实就是一个仿函数,默认值是 store,有'store_true'、也可是自定义的仿函数,这个仿函数要继承Action类

    例如(1):
    在这里插入图片描述
    例如(2):
    在这里插入图片描述

    class DictAction(Action):
    	@staticmethod
        def _parse_int_float_bool(val):
            pass
        @staticmethod
        def _parse_iterable(val):
            def find_next_comma(string):
            	pass
            pass
        
        def __call__(self, parser, namespace, values, option_string=None):
            options = {}
            for kv in values:
                key, val = kv.split('=', maxsplit=1)
                options[key] = self._parse_iterable(val)
            setattr(namespace, self.dest, options)
    

    store_const,表示赋值为const;

    append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;

    append_const,将参数规范中定义的一个值保存到一个列表;

    count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;

    nargs - 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。

    const - action 和 nargs 所需要的常量值。

    default - 不指定参数时的默认值。

    type - 命令行参数应该被转换成的类型。

    choices - 参数可允许的值的一个容器。

    required - 可选参数是否可以省略 (仅针对可选参数)。

    help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.

    metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.

    dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.

    举例:

    parser.add_argument('--img', help='Image file')
    parser.add_argument('--config', help='Config file')
    parser.add_argument('--checkpoint', help='Checkpoint file')
    parser.add_argument('--device', default='cuda:0', help='Device used for inference')
    

    (3)解析参数:使用parse_args()解析添加的参数,返回一个args对象,该对象包含如上四个参数的成员属性

    args = parser.parse_args()  # 返回对象args,这个对象包含如上4个参数的成员属性
    
  • 如何使用这些参数呢?

    config = args.config
    checkpoint = args.checkpoint
    device = args.device
    

互斥组

看一个demo:

parser = argparse.ArgumentParser(description='Train a model')
group_gpus = parser.add_mutually_exclusive_group()
group_gpus.add_argument('--device', help='device used for training')
group_gpus.add_argument(
    '--gpus',
    type=int,
    help='number of gpus to use '
    '(only applicable to non-distributed training)')
group_gpus.add_argument(
    '--gpu-ids',
    type=int,
    nargs='+',
    help='ids of gpus to use '
    '(only applicable to non-distributed training)')

据资料所说,group_gpus = parser.add_mutually_exclusive_group()创建一个互斥的组。 互斥表达啥意思呢,就是说argparse将确保在命令行上只存在互斥组中的一个参数,例如:

import argparse

def paser_args():
    paser = argparse.ArgumentParser()
    paser.add_argument('--Num-count')

    group_nums = paser.add_mutually_exclusive_group()
    group_nums.add_argument('--num-1')
    group_nums.add_argument('--num-2')
    group_nums.add_argument('--num-3')

    args = paser.parse_args()

    return args


if __name__ == '__main__':
    args = paser_args()
    print(args.Num_count)

运行命令如下时,不会报错:

(torch) D:\研究生课程\数值分析\第二次作业>python temp.py --Num-count=2 --num-1=2
2

但再添加一个互斥组中的其他变量时,会报错,如下:

(torch) D:\研究生课程\数值分析\第二次作业>python temp.py --Num-count=2 --num-1=2 --num-2=2
usage: temp.py [-h] [--Num-count NUM_COUNT]
               [--num-1 NUM_1 | --num-2 NUM_2 | --num-3 NUM_3]
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值