argparse解析器参数详解

argparse 是 Python 标准库中用于解析命令行参数 的模块,ArgumentParser 是其核心类,用于定义和解析命令行接口。

使用示例

arg.py脚本中定义

python 复制代码
import argparse

# 创建解析器
parser = argparse.ArgumentParser(description="训练脚本")

# 添加参数
parser.add_argument("--epochs", type=int, default=10, help="训练轮数")
parser.add_argument("--lr", type=float, default=0.001, help="学习率")

# 解析参数
args = parser.parse_args()

# 使用参数
print(f"训练 {args.epochs} 轮,学习率 {args.lr}")

然后运行这个脚本的时候,就可以读取命令里的参数了

bash 复制代码
python arg.py --epochs 20 --lr 0.01

add_argument函数

这里重点讲一下这个函数,下面是这个函数的参数讲解

参数 说明 示例
name 参数名(-- 开头为可选,否则为必需) "--epochs", "input_file"
type 参数类型转换 int, float, str, bool
default 默认值,不管命令里带不带都会被赋值 10, 0.001, "cpu"
help 帮助信息,也就是注释 "训练轮数"
required 是否必需(仅对可选参数有效) True/False
choices 如果是可选值的话,对应的可选值列表 ["cpu", "cuda", "mps"]
nargs 参数个数 "+", "*", 2, 3
action 特殊动作 "store_true", "append", "count"
dest 存储的目标属性名 "num_epochs"

action参数项

Action 说明 典型用途
store 存储参数值(默认) 普通参数
store_const 存储const指定的常量 固定值选项
store_true 存储 True 布尔开关
store_false 存储 False 布尔开关
append 将值添加到列表 多次指定参数
append_const const 常量添加到列表 累积固定值
count 计数参数出现次数 详细程度 -v
help 显示帮助并退出 自动添加
version 显示版本并退出 版本信息
extend 扩展列表(Python 3.8+) 合并多个列表值

1、store_const

python 复制代码
parser.add_argument("--mode", action="store_const", const=42)
bash 复制代码
$ python script.py --mode
42

一般与default进行配合使用

python 复制代码
parser.add_argument("--log", action="store_const", const="DEBUG", default="INFO")
bash 复制代码
$ python script.py
INFO
$ python script.py --log
DEBUG

2、store_truestore_false

一般用于布尔开关

python 复制代码
parser.add_argument("--verbose", action="store_true")
bash 复制代码
$ python script.py
Verbose: False

$ python script.py --verbose
Verbose: True

使用type进行布尔开关一般是错的

python 复制代码
parser.add_argument("--use-cuda", type=bool, default=True)

因为本质上,Python 中 bool("False") 的结果是 True(因为非空字符串都为真)。 命令行传入的参数都是字符串,所以:

  • --use-cuda Falseargs.use_cudaTrue (字符串 "False" 转为 bool 为真)
  • --use-cuda Trueargs.use_cudaTrue

3、append

python 复制代码
parser.add_argument("--file", action="append")
bash 复制代码
$ python script.py --file a.txt --file b.txt --file c.txt
['a.txt', 'b.txt', 'c.txt']

4、count

python 复制代码
parser.add_argument("-v", "--verbose", action="count", default=0)
bash 复制代码
$ python script.py
Verbose level: 0

$ python script.py -v
Verbose level: 1

$ python script.py -vv
Verbose level: 2

$ python script.py -vvv
Verbose level: 3

一般用于

python 复制代码
if args.verbose == 0:
    log_level = "WARNING"
elif args.verbose == 1:
    log_level = "INFO"
else:
    log_level = "DEBUG"

5、help

python 复制代码
parser.add_argument("--help-custom", action="help")

# 通常不需要手动添加,ArgumentParser 会自动添加 -h/--help
bash 复制代码
$ python script.py --help-custom
# 显示帮助并退出

6、extend

python 复制代码
parser.add_argument("--nums", action="extend", nargs="+", type=int)
bash 复制代码
$ python script.py --nums 1 2 --nums 3 4
[1, 2, 3, 4]

# 对比 append:
# $ python script.py --nums 1 2 --nums 3 4
# [[1, 2], [3, 4]]
相关推荐
深圳雨林凯AI1 小时前
图案裂变的“风格归一化“设计思路:主体保得住,画风才拉得齐|雨林凯AI技术笔记
人工智能·笔记
问天_观心1 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
洋洋不叫杨杨1 小时前
揭秘当下知名的SEO优化渠道,你知道几个?
大数据·python
阿童木写作2 小时前
跨境图片翻译工具推荐:批量处理视频字幕与智能抠图
python·音视频
指掀涛澜天下惊2 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
梦想的颜色2 小时前
OCR 识别原理与 Python 识图全实战:从文字提取到图像内容理解
python·计算机视觉·ocr·图像识别·python 识图
禹凕2 小时前
Dijkstra算法详解与应用
python·算法
star learning white2 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
传奇开心果编程2 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
lifallen3 小时前
Skill 的生命周期:问题消失以后
人工智能·学习·ai·ai编程