argparse --- 命令行选项、参数和子命令解析器详解

一、argparse简介

argparse模块提供了非常方便的命令行参数解析功能,能够大大简化命令行程序的开发。
现在的大型项目中都会运用argparse来管理项目中涉及的参数,在使用命令行时更好地定义模型参数。

argparse定义四个步骤:

  1. 导入argparse包 ——import argparse
  2. 创建一个命令行解析器对象 ——创建 ArgumentParser() 对象
  3. 给解析器添加命令行参数 ——调用add_argument() 方法添加参数
  4. 解析命令行的参数 ——使用 parse_args() 解析添加的参数

二、说明

1.参考示例

现有一个scratch.py的文件,使用命令行执行它。

import argparse

# 创建 ArgumentParser()对象
parser = argparse.ArgumentParser(description='Process some integers.')  # description简单说明命令行参数的作用

# 调用add_argument() 方法添加参数
parser.add_argument("dataset", help="discribe dataset")
parser.add_argument("--big", action="store_const", default=0, const=999, help="discribe big")

# 使用 parse_args() 解析添加的参数
args = parser.parse_args()

# 调用dataset参数
print(args.dataset)
# 输出coco

在这里插入图片描述

2.add_argument参数

2.1 name_or_flags

name_or_flag参数是一个命名(参数名),例如 dataset-dataset, --dataset。如果同时传入-d和--dataset,传参时任选一种即可。两者是等价的,只是在语法上稍有不同。当我们需要快速输入多个参数时,使用-d比--dataset更快速。相当于-d时--dataset的简写。

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')  # 
parser.add_argument("-d", "--dataset", help="discribe dataset")
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述

如果定义的是dataset,则表示位置参数,用户在命令行中输入参数时,需要按照定义时的顺序输入且不用输入参数名。如下所示,按照name、age顺序传入参数值。

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')  # 
parser.add_argument("name", help="discribe name")
parser.add_argument("age", help="discribe age")
args = parser.parse_args()
# 打印参数值
print(args.name,args.age)

在这里插入图片描述

2.2 action、default

  • default参数表示如果在命令行中没有输入参数值的话就会调用default的默认值。如下所示,第一行命令没有传入is_action,所以其默认值是False
  • action参数表示如果在命令行中该参数名被找到时触发的操作或行为。比如is_action 参数定义了action="store_true",那么只要在命令行中出现了该参数,那么is_action 的值就会被设置为True
  • 如下图第二行的命令所示,出现了--is_action 所以结果输出为True
  • 同理,action="store_False"表示解析到了/出现了该参数就设置为Fasle
import argparse

parser = argparse.ArgumentParser(description='Process some integers.')  
parser.add_argument("--is_action",default=False, action="store_true", help="discribe is_action")
args = parser.parse_args()
print(args.is_action)

在这里插入图片描述

如果action="store_const"表示解析到了/出现了该参数就设置为const,其中const为我们定义在action后的const参数值。如下所示:指定const=9999

parser.add_argument("--is_action",default=False, action="store_const",const=9999, help="discribe is_action")

在这里插入图片描述

2.3 nargs

nargs参数用于指定命令行参数的个数,它决定了参数的输入方式和解析方式。如下图所示,指定nargs=3,即--ls需要传入3个值否者会报错。传入的3个值组成一个列表赋值给--ls

import argparse

parser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument("--ls", nargs=3)
args = parser.parse_args()
print(args.ls)

在这里插入图片描述

nargs参数的取值可以为以下几种:

  • N(例如3):参数接受 N 个值。
  • ?:参数可以接受 0 个或 1 个值。
  • *:参数可以接受任意个数的值,存储为列表。
  • +:参数可以接受至少一个值,存储为列表。

示例:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument("--ls", nargs="*")
args = parser.parse_args()
print(args.ls)

在这里插入图片描述

2.4 type

type参数用于指定命令行参数的类型。在解析命令行参数时,argparse会将字符串类型的参数转换为指定的类型。下面是一些常见的type参数值:

  • str:字符串类型,这是默认值。
  • int:整数类型。
  • float:浮点数类型。
  • bool:布尔类型,接受True或False。
  • list:列表类型。

示例:指定转换为int类型,传入--dataset 为coco时报错,因为coco不能转换为int类型。传入--dataset 为字符串类型的"909"时,成功转换为int类型。

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset", type=int)
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset", type=list)
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述

2.5 choices

choice参数用于指定命令行参数的可选值。如下所示,指定--dataset只能取coco或者voc2012,否则报错。

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset", choices=["coco","voc2012"])
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述

2.6 metavar

metavar当使用 python xx.py --help命令获取参数信息时,仅仅改变参数的显示名字,不改变参数的调用方式。

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset")
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述

即在打印帮助信息时,可以帮助用户理解--dataset参数的作用,即它是用于指定train_dataset

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset", metavar="train_dataset")
args = parser.parse_args()
print(args.dataset)

在这里插入图片描述

2.7 dest

dest参数用于指定解析器解析命令行参数后,将其存储在哪个属性中。默认情况下,argparse将使用参数的名称作为属性的名称。例如,如果参数名称为--dataset,则解析器将创建一个名为dataset的属性,即上文中的print(args.dataset),并将解析结果存储在该属性中。如果指定了dest参数,则可以使用不同的名称存储解析结果。

注意 此时不是print(args.dataset)而是print(args.train_set),相当于重命名属性名称使其更容易理解。

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument("--dataset", dest="train_set")
args = parser.parse_args()
# 注意 此时不是args.dataset而是args.train_set
print(args.train_set)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/254241.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

条款5:了解c++默默编写并调用了哪些函数

如果你不自己声明,编译器会替你声明(编译器版本的)拷贝构造函数、拷贝赋值运算符和析构函数。此外,如果你没有声明任何构造函数,编译器会为你声明一个默认构造函数。 class Empty{};本质上和写成下面这样是一样的: c…

LLM之Agent(六)| 使用AutoGen、LangChian、RAG以及函数调用构建超级对话系统

本文我们将尝试AutoGen集成函数调用功能。函数调用最早出现在Open AI API中,它允许用户调用外部API来增强系统的整体功能和效率。例如,在对话过程中根据需要调用天气API。 函数调用和Agent有各种组合,在这里我们将通过函数调用调用RAG检索增强…

SpringBoot 3.2.0 版本 mysql 依赖下载错误

最近想尝试一下最新的 SpringBoot 项目,于是将自己的开源项目进行了一些升级。 JDK 版本从 JDK8 升级至 JDK17。SpringBoot 版本从 SpringBoot 2.7.3 升级到 SpringBoot 3.2.0 其中 JDK 的升级比较顺利,毕竟 JDK 的旧版本兼容性一直非常好。 但是在升级…

红酒为何会变蓝?这是什么原因?

有的朋友发现红酒酒渍当天没有清洗,第二天会变蓝。于是非常好奇,明明红色的葡萄酒,怎么会变蓝呢? 葡萄酒不但含有酒精,还含有丰富的天然色素花青素。就像我们平时在家煮紫薯粥,加一点小苏打明明紫红色的粥就…

C++计算(a+b)*(c-b)的值 2023年9月c++一级 电子学会中小学生软件编程C++等级考试一级真题答案解析

目录 C计算(ab)*(c-b)的值 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C计算(ab)*(c-b)的值 2023年9月 C编程等级考试一级编程题 一、题目要求 1、编程实现 给定3个整数a、b、c,计算表达…

爬楼梯算法

计算跳到n阶的跳法总数 package com.zxj.algorithm.动态规划;import lombok.extern.slf4j.Slf4j;import java.util.Arrays;/*** 递归函数 f(n): 计算跳到n阶的跳法总数。* <p>* f(0) 0,* f(1) 1,* f(2) 2,* f(n) f(n-1) f(n-2)*/ Slf4j public class 爬楼梯 {/*** …

【MATLAB】数据拟合第12期-基于高斯核回归的拟合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 基于高斯核回归的拟合算法是一种处理回归问题的机器学习方法。以下是该算法的简单介绍&#xff1a; 核心思想&#xff1a;高斯核回归的核心思想是利用高斯核函数对数据点进行非线性映射&a…

SpringBoot已经禁掉了循环依赖!

还在问循环依赖嘛&#xff1f;SpringBoot已经禁掉了循环依赖&#xff01; 首发2023-12-18 11:26yuan人生 如果现在面试时还有人问你循环依赖&#xff0c;你就这样怼他&#xff1a;循环依赖是一种代码质量低下的表现&#xff0c;springboot2.6之后的版本已经默认禁用了。 Spr…

【MySQL】数据库基础入门 安装MySQL

目录 介绍&#xff1a; 安装MySQL: 设置 root 账号密码 2.配置环境变量 2.找到 Path 系统变量, 点击 "编辑" 介绍&#xff1a; MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是一种用于管理和存储数据的软件。 安装MySQL: …

Vue3进阶:常用的指令缩写详解,以及代码使用示例

目录 v-bind缩写 v-on缩写 v-if和v-show缩写 v-for缩写 总结 更多关于Vue前端相关技术点&#xff0c;敬请关注公众号&#xff1a;CTO Plus后续的发文&#xff0c;有问题欢迎后台留言交流。 注意&#xff1a;由于排版太费时间&#xff0c;所以还是多多注重技术干货的内容吧…

国产电源芯片SCT2450QSTER,替代TPS54540-Q1,车规级36V 5A输出同步降压DCDC转换器

国产SCT2450Q是一款输出电流高达5A的高功率密度全集成同步降压DCDC转换器。其输入电压范围为3.8V到36V&#xff0c;集成了48mΩ高压侧MOSFET和23mΩ低压侧MOSFET。SCT2450Q采用峰值电流控制模式&#xff0c;可支持具有典型25uA低静态电流的脉冲跳过调制&#xff08;PSM&#xf…

Charles 安装与激活

步骤 1&#xff1a;购买 Charles 许可证 访问 Charles 官方网站&#xff1a;https://www.charlesproxy.com/ 在网站上查找并选择 “Buy” 或类似的选项。 选择适合你需求的许可证类型&#xff0c;填写相关信息并完成购买。 如果不想购买可点击此链接Charles 步骤 2&#xff…

ESP32 连接阿里云 MQTT 报错MQTT Connect err:2

解决方法 跳转到 这个头文件<PubSubClient.h>里 MQTT_MAX_PACKET_SIZE 把这个的大小从原来的256 改为1024 MQTT_KEEPALIVE 把这个大小从原来的15 改为65 修改后再次连接即可成功 如下图&#xff1a;

人工智能在电子商务中的十大最佳用例

“如果你没有躲在山洞里&#xff0c;你可能听说过人工智能&#xff08;AI&#xff09;这个神奇的东西。它就像一个超级智能的计算机大脑&#xff0c;像电子商务中的人工智能一样无处不在。你猜怎么着&#xff1f;它甚至进入了在线购物领域&#xff0c;这真是太棒了。” 人工智…

【贪心算法】【中位贪心】LeetCode:100123.执行操作使频率分数最大

涉及知识点 双指针 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 贪心算法 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 你可以对数组执行 至多 k 次操作&#xff1a; 从数组中选择一个下标 i &#xff0c;将 nums[i] …

分享!!!(一)小编总结的base64、blob、图片文件二进制相互转换的方式以及源码

目录 第一章 了解 1.1 大概结构 1.2 准备阶段 1.2.1 了解canvas 1.2.2 了解imageData 1.2.3 了解imgUrl 1.2.4 了解base64 1.2.5 了解blob/文件二进制流 1.2.6 了解arraybuffer 1.2.7 文件、图片 第二章 掌握图中的相互转换 2.1 cavas 与 imageData的互相转换 2.1…

【Java】基于fabric8io库操作k8s集群实战(pod、deployment、service、volume)

目录 前言一、基于fabric8io操作pod1.1 yaml创建pod1.2 fabric8io创建pod案例 二、基于fabric8io创建Service&#xff08;含Deployment&#xff09;2.1 yaml创建Service和Deployment2.2 fabric8io创建service案例 三、基于fabric8io操作Volume3.1 yaml配置挂载存储卷3.2 基于fa…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)控件的部分公共属性和事件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;控件的部分公共属性和事件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、公共属性 常用的公共属性有&#xff1a; 宽(with)、高(height)、…

Python Pandas 如何增加/插入一列数据(第5讲)

Python Pandas 如何增加/插入一列数据(第5讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

17.Oracle中instr()函数查询字符位置

1、instr()函数的格式 &#xff08;俗称&#xff1a;字符查找函数&#xff09; 格式一&#xff1a;instr( string1, string2 ) // instr(源字符串, 目标字符串) 格式二&#xff1a;instr( string1, string2 [, start_position [, nth_appearance ] ] ) // instr(源字符…