Python中argparse的快速理解
大型项目中一般使用了较多的argparse来管理不同的超参等内容,本文从argparse的位置参数、可选参数、默认值参数、布尔类型参数进行介绍,简单易懂
最近在学习关于如何使用YOLO进行目标检测的项目,发现这些大型项目的管理较多采用
argparse
库来达到在终端指定默认超参的方式进行便捷式的运行项目,那么我就以该笔记记录下我对于该库的理解,轻易且快速的入手吧!
1 Argparse模块的实验
逐行阅读如下不同参数的引入规范:
#这段python代码请放置为命名为example.py文件内即可
import argparse #导入argparse库
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(description='这是一个示例脚本,用于演示 argparse 的使用。')
# 添加位置参数
parser.add_argument('input_file', help='输入文件的路径')
# 添加可选参数
parser.add_argument('-o', '--output_file', help='输出文件的路径')
# 添加带默认值的参数
parser.add_argument('-n', '--num_iterations', type=int, default=10, help='迭代次数,默认为 10')
# 添加布尔类型参数
parser.add_argument('--verbose', action='store_true', help='是否显示详细信息')
# 解析命令行参数
args = parser.parse_args()
# 使用解析后的参数,此处的核心理解点在于parse_args会将终端传入的参数与上述通过add_argument添加的参数构成字典的键值对
# 所以如下的args.input_file等内容均是字典键值对的访问形式(剧透了)
input_file = args.input_file
output_file = args.output_file
num_iterations = args.num_iterations
verbose = args.verbose
print(f'输入文件: {input_file}')
if output_file:
print(f'输出文件: {output_file}')
print(f'迭代次数: {num_iterations}')
print(f'是否显示详细信息: {verbose}')
终端运行:
python example.py input.txt -o output.txt -n 20 --verbose
我们能够发现在终端运行的程序中,关于位置参数(即input_file)而言我们是直接输入相应的值(即input.txt),而就可选参数(即-o,主要是针对-o,-n和–verbose有点特殊)而言,都是必须得加上add_argument内的第一个类似标识符一样的命令**(即-o、-n、--verbose)
而后才能添加值**(即终端输入的output.txt、20、(只有加入了标识符我们才能正确地传入相应的值!)。
2 相应部分的解释
通过实验部分的直观代码的展示,应该会对他们之间有些表面的印象了,现在针对每一块部分都理解下他们之间的细节之处吧。
import argparse #导入argparse库
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(description='这是一个示例脚本,用于演示 argparse 的使用。')
咱们运用argparse
来管理项目的话,必须首先定义好这些规定的开头才能正确调用后续的代码,该为argparse
库的框架结构。
位置参数
# 添加位置参数
parser.add_argument('input_file', help='输入文件的路径')
就位置参数这一块,我们对其运用add_argument
是没有以-
或--
开头的,而是直接以相应描述该超参传递的表示直接开头。
如果项目较为复杂,而且有许多都必需要指定相应的内容进行传递值时,就直接使用位置参数的功能就行,但一旦项目文件内有很多的位置参数,那么我们在终端运行时如何指定相应的输入内容与argparse
一直呢?这个问题已经被解决掉:位置参数是按照参数定义的顺序,依次将命令行中未指定选项的参数值赋给对应的位置参数!
随后的help='xxx'
这一块的内容就容易直观理解:就是解释我们这个参数的作用。
可选参数
# 添加可选参数
parser.add_argument('-o', '--output_file', help='输出文件的路径')
可选参数的开头就是以’-‘或’–'开头,在终端时我们直接指定即可,由于有相应的开头标识符,我们关于可选参数的使用就可以不需要按照规定的顺序咯!
并且可选参数不是必须要调用的, 即可调用也可以不调用,当我们在终端时没调用时他会自动归为None
。
带默认值的参数
# 添加带默认值的参数
parser.add_argument('-n', '--num_iterations', type=int, default=10, help='迭代次数,默认为 10')
带默认值的参数中由于定义好了default=10,所以在终端不调用他的话,也会默认输出内容为10来在整个项目内充当作用,若我们想要修改的话也可以在终端执行-n you_want_number如20
.
布尔类型的参数
# 添加布尔类型参数
parser.add_argument('--verbose', action='store_true', help='是否显示详细信息')
parser.add_argument('--num', type=int, action='store', help='输入一个整数')
parser.add_argument('--values', action='append', type=int, help='输入整数值')
就布尔类型的参数,他也和默认值参数一样在终端的输入中可有可无,不过得需要依据项目的实际情况来操作(因为需要考虑用户针对该项目的用意),他是通过action='store_true'
来确定他是否为True,这里的action
表示为一个动作,我们需要根据其后面的赋值情况来判断:如果终端命令中输入了--verbose
,那么即为True
,否则为False
.
关于action='store'
这个store
默认动作,其中type=int
表示指定了赋值的数据类型。
关于action='append'
这个append
默认当作,其表示为我们可以在终端指定该参数多次,并且会逐步将我们输入的多个参数值添加到一个列表内。
python xx.py --values 1 --values 2 --values 3
#这里xx.py是任意的,包含上述命令的文件
return: args.values : [1, 2, 3]
parse_args
解析
上述argparse
的参数都定义完毕后,为了与我们终端输入的内容进行链接,所以开发者开发了相应的解析命令即parse_args()
。
args = parser.parse_args()
解析完毕后,我们在终端执行相应的命令(这儿对应的代码是第一部分Argparse模块的实验代码哦):
python example.py input.txt -o output.txt
args
对应的解析结果:
args = {
"input_file": "input.txt",
"output_file": "output.txt",
"num_iterations": 10, # 使用默认值
"verbose": False # 未指定,使用默认值
}
所以我们就能清晰地知晓后续赋值的结果了吧,就是字典的键值对取值啊!
input_file = args.input_file
output_file = args.output_file
num_iterations = args.num_iterations
verbose = args.verbose
更多推荐
所有评论(0)