• Python argparse使用方法介绍


    官方文档地址

    Python argparse使用方法介绍

    1. argparse使用流程

    # 1. 导入包
    import argparse
    # 2. 实例化对象
    parser = argparse.ArgumentParser(description='Test.')
    # 3. 添加参数
    """
    参数分必选参数和可选参数
    参数名前面没有'-'则代表是必选参数,传参时无需指定参数名,直接指定参数值即可(多个必选参数,按参数顺序解析)
    参数名前面带有'-'或'--'表示是可选参数,解析成对象属性时,属性名会自动忽视左侧的'-',如-a,获取值时使用的是xxx.a
    参数名除了开头有'-',其它位置也有'-'时,在解析成对象属性时,其它位置的'-'会转换为'_',如--a-b,获取值时使用的是xxx.a_b
    """
    parser.add_argument('integer')  # 添加必选参数integers
    parser.add_argument('-a')  # 添加可选参数a
    parser.add_argument('--b-c')  # 添加可选参数b_c
    # 4. 解析参数
    args = parser.parse_args()  # 通过控制台传参
    # args = parser.parse_args(['1', '-a', 'value of a', '--b-c', 'value of b_c'])  # 通过代码传入参数
    print(args.integer)
    print(args.a)   # 属性名不需要带左侧的'-'
    print(args.b_c)  # 解析时,参数名后面的'-'在属性名中被转为'_'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    2. argparse.add_argument参数说明

    • name, 指定参数名称
      - 必选参数是没有以’-’开头的参数
      - 可选参数是以’-‘或’–'开头的参数
    • action, 当参数在命令行中出现时使用的动作基本类型
      - 常用的值为:‘store’(默认),‘store_true’, ‘store_false’, ‘store_const’, ‘count’, ‘append’, ‘extend’
      - ‘store’:即获取通过命令行传入的值
      - ‘store_false’:命令行有指定该参数,则参数值为false,否则为true。传参时不需要再指定参数值
      - ‘store_true’:与’store_false’相反
      - ‘store_const’:命令行有指定该参数,则该参数的值为参数’const’定义的值
      - ‘count’:命令中该参数出现的次数作为该参数的值
      - ’append’:该参数如果指定多次,则将其值合并在一个list中
      - ‘extend’:该参数如果指定多次,则将其值合并在一个list中。与append的区别在于一个是用list的append方式追加,一个是用list的extend方式追加
    • nargs, 该参数的值的个数,用于同一个参数传入多个值
    • const, 被一些 action 和 nargs 选择所需求的常数
    • default, 用户未指定该参数时的默认值
    • type, 指定参数的数据类型
      - 如果是bool类型,只是将空字符串转为 False 而将非空字符串转为 True
    • choices, 给定一组值,参数值只能在这组值中选
    • required, 该可选参数是否时必填的
    • help, 对该参数的功能进行介绍,在调用help时呈现
    • metavar, 介绍参数值示例,在调用help时呈现,对代码本身无作用,只是对人起到提示的作用
    • dest, 指定参数在引用时所对应的属性名称
    # 必选参数,使用时无需指定参数名
    # parser.parse_args(['/home/data_dir']) 是对的
    # parser.parse_args(['data_dir', '/home/data_dir']) 是错的
    # 取值时使用parser.data_dir
    args = parser.add_argument('data_dir', metavar='DIR',
                        help='path to dataset')
    
    # 定义可选参数dataset,默认值为'',使用时可用如下两种方式
    # parser.parse_args(['--dataset', '/home/data_dir'])
    # parser.parse_args(['-d', '/home/data_dir'])
    # 取值时忽视左侧的所有'-',使用parser.dataset(如果同时指定'--'和'-'两种传参方式,则取值时以'--'定义的名称
    args = parser.add_argument('--dataset', '-d', metavar='NAME', default='',
                        help='dataset type (default: ImageFolder/ImageTar if empty)')
    
    # 定义可选参数pretrained,如果命令行指定该参数,则其值为true,否则为false
    args = parser.add_argument('--pretrained', action='store_true', default=False,
                        help='Start with pretrained version of specified network (if avail)')
    # 只需要指定参数名,不需要指定参数值 parser.parse_args(['--pretrained', True]) 是错误的 
    # parser.parse_args(['--pretrained']) 此时parser.pretrained为True
    # parser.parse_args([]) 此时parser.pretrained为False
    
    # 定义可选参数input_size,长度为3,数据类型为int型
    args = parser.add_argument('--input-size', default=None, nargs=3, type=int, metavar='N N N')
    # parser.parse_args(['--input-size', '3 224 224']) 三个值用空格隔开
    # 取值时使用args.input_size, 除了左侧开头的'-'被忽视,其它位置的'-'均被解析为'_'
    
    
    # 定义可选参数torchscript
    args = parser.add_argument('--torch-script', dest='torchscript', action='store_true',
                        help='torch.jit.script the full model') 
    # parser.parse_args(['--torch-script'])  赋值为True,因为action='store_true'
    # parser.parse_args([])  赋值为False,因为action='store_true'
    # 取值时,使用args.torchscript dest对属性进行重命名了
    
    # 定义可选参数sum
    args = parser.add_argument('-sum',  dest='accumulate', action='store_const',
                         const=sum, default=max,
                         help='sum the integers (default: find the max)')
    parser.parse_args(['-sum']) # args.accumulate的值为const定义的sum
    parser.parse_args([]) # args.accumulate的值为default定义的max
    
    # 定义可选参数move,其值只能是['rock', 'paper', 'scissors']中的一个
    parser.add_argument('-move', choices=['rock', 'paper', 'scissors'])
    parser.parse_args(['-move', 'rock'])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    3.21 小红书薯条改版了,都改了些什么呢?【玩赚小红书】
    用Python制作可视化GUI界面,一键实现多种风格的照片处理
    【深入浅出 Yarn 架构与实现】2-2 Yarn 基础库 - 底层通信库 RPC
    HAProxy代理TCP(使用HAProxy 为TiDB-Server 做负载均衡)
    翻倍增长!C-V2X商业化“提速”,新一代模组加速“助跑”
    八股操作系统和计算机网络
    Flutter项目开发模版,开箱即用
    509.斐波那契数列
    Typec手机有线网卡网线转网口转接口快充方案
    【NoSQL数据库】Redis简介
  • 原文地址:https://blog.csdn.net/donger__chen/article/details/126331440