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_true与store_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 False → args.use_cuda 是 True (字符串 "False" 转为 bool 为真)
  • --use-cuda True → args.use_cuda 是 True

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]]
相关推荐
飞Link6 小时前
什么是 AirSim?一文读懂无人机仿真平台
python·算法·无人机
曲径海盗7 小时前
【Python 学习第 38 天】for 循环
python·学习笔记·编程入门
zhangrelay7 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
在世修行7 小时前
智学文枢:变式题生成引擎
python·ai·pyside·题目生成
Jimmy8 小时前
深夜突袭:我们的午夜战场
笔记·产品·电子书
2601_967212728 小时前
智能电源轨道技术原理、认证核查与场景适配说明
大数据·经验分享·安全
虹科网络安全8 小时前
Redis 8.10:紧凑 Hash、JSONPath 扩展与增量备份
经验分享
On The Road :9 小时前
Java 多线程详解:从入门到线程安全
java·python·安全
岁月宁静9 小时前
如何设计支持 Skills 的 Agent?一套可扩展的四层架构
python·agent
志尊宝9 小时前
AI原生前端开发(025):端侧AI实战项目:智能笔记助手
人工智能·笔记·ai-native