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]]
相关推荐
lazy H21 分钟前
从入门到日常开发,一篇文章掌握 Git 核心操作
git·后端·学习·github
蜜桃味女焊匠人2 小时前
焊接生产线优化思路:解决手工焊、机器人焊气体浪费问题
人工智能·经验分享·其他·机器人
Scott9999HH8 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
AI云海9 小时前
python 列表、元组、集合和字典
开发语言·python
克里斯蒂亚诺更新9 小时前
ruoyi角色权限的对应关系
笔记
二十雨辰9 小时前
[爬虫]-Urllib
爬虫·python
玉鸯11 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
weixin_4462608512 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
a11177612 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习