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]]
相关推荐
Shining05962 小时前
AI编译器系列(二)《AI 编译器中的前端优化》
人工智能·学习·其他·学习方法·infinitensor
码喽7号2 小时前
springboot学习四:RESTful风格+swagger
spring boot·学习·restful
盛源_012 小时前
Windows 安装 Claude Code 指南
经验分享·ai编程
weixin_458872612 小时前
东华复试OJ二刷复盘8
学习
鬓戈2 小时前
SeaweedFS集群上文件遍历和删除
运维·python
海奥华22 小时前
Rust初步学习
开发语言·学习·rust
王知无(import_bigdata)3 小时前
一个极简的AI Agentic Engineering技术栈学习路线
人工智能·学习
我是大猴子3 小时前
零代码应用笔记
笔记
y = xⁿ3 小时前
【从零开始学习Redis|第七篇】Redis 进阶原理篇:消息队列、分布式锁、缓存击穿与事务实现
java·redis·学习·缓存