在 Python 开发中,命令行参数解析是自动化脚本、批量处理程序的核心能力。argparse作为 Python 内置的标准模块,能替代繁琐的 sys.argv 手动解析,提供标准化、易维护的参数处理方案。本文结合实战案例(覆盖基础到进阶),采用教程级讲解逻辑,并参考经典教学示例,帮助新手快速掌握 argparse 的全部核心用法。
一、为什么选择 argparse?
| 特性 | 说明 |
|---|---|
| 开箱即用的帮助体系 | 运行 -h/--help 自动生成参数说明,无需手写文档 |
| 强类型校验 | 自动校验字符串、整数、枚举值等,传错参数直接抛出友好错误 |
| 灵活的参数配置 | 支持位置参数、可选参数、必填参数、默认值、参数缩写等 |
| 工程化规范 | 符合 Python PEP 编码规范,代码可读性与可维护性远超手动解析 |
二、argparse 基础工作流程
使用 argparse 只需四步,是所有案例的通用框架:
import argparse
# 1. 创建参数解析器(容器)
parser = argparse.ArgumentParser(description="程序功能描述")
# 2. 向解析器中添加参数(定义规则)
parser.add_argument("参数名", 配置项1, 配置项2, ...)
# 3. 解析命令行传入的参数(执行解析)
args = parser.parse_args()
# 4. 使用参数(业务逻辑)
print(args.参数名)
三、核心参数配置详解
add_argument() 方法常用参数如下:
| 参数 | 作用 | 示例 |
|---|---|---|
name or flags |
参数名(可选参数需加 --) |
'--name', '-n' |
type |
参数类型(int, str, float等) | type=int |
help |
参数说明(-h时显示) | help='请输入年龄' |
default |
默认值(不传参时使用) | default='medium' |
required |
是否为必填 | required=True |
choices |
限定可选值列表 | choices=['张三','李四'] |
action |
特殊动作(如开关参数) | action='store_true' |
dest |
指定代码中使用的变量名 | dest='img_path' |
四、核心案例实战(全覆盖知识点)
案例 1:基础参数定义(类型限制 + 帮助信息)
目标 :定义 --name(字符串)、--age(整数)参数,输出个性化问候。
import argparse
parser = argparse.ArgumentParser(description="基础案例:接收姓名和年龄并输出问候语")
parser.add_argument('--name', type=str, help='请输入你的姓名(字符串类型)')
parser.add_argument('--age', type=int, help='请输入你的年龄(整数类型)')
args = parser.parse_args()
if args.name and args.age:
print(f"Hello {args.name}, you are {args.age} years old!")
运行演示:

关键细节说明:
-
type 参数强制限定输入类型,若传入
--age twenty会报类型错误。 -
description给命令行工具添加整体的说明文字
-
help字符串会在-h时自动显示,帮助用户理解参数含义。 -
不传参数时,对应属性值为
None,代码中需要做存在性检查(如if args.name)。
案例 2:参数缩写 + 可选值限制(choices)
目标 :定义 -gf/--girlfriend 参数,仅允许传入指定枚举值(Lily / Eva)。
import argparse
parser = argparse.ArgumentParser(description="参数缩写+可选值限制案例")
parser.add_argument('-gf', '--girlfriend', choices=['Lily', 'Eva'],
help='选择女朋友(仅支持:Lily/Eva)')
args = parser.parse_args()
print(f'选中的女朋友:{args.girlfriend}')
运行演示:

关键细节说明:
-
参数全称为
--girlfriend,缩写为-gf,命令行中两者等效。 -
解析后,在代码中调用该参数,只能使用完整的参数名称
args.girlfriend,不能使用args.gf(dest默认取自第一个长选项名或第一个选项去除短横)。 -
choices限制可选值,传入列表外的值会立即报错,无需手动校验。 -
不传参时值为
None,可根据需要设置default。
案例 3:位置参数(无 -- 前缀的必填参数)
目标 :定义 food、color 两个位置参数(必填),--size/-s 可选参数(带默认值)。
import argparse
parser = argparse.ArgumentParser(description="位置参数+默认值案例")
parser.add_argument('food', help='喜欢的食物(位置参数1,必填)')
parser.add_argument('color', help='喜欢的颜色(位置参数2,必填)')
parser.add_argument('--size', '-s', default='medium',
help='尺寸(默认:medium,可选:small/large)')
args = parser.parse_args()
print(f"食物:{args.food},颜色:{args.color},尺寸:{args.size}")
运行演示:

关键细节说明:
-
位置参数没有
-或--前缀,必须按顺序传入,且为必填(除非设置nargs='?'等特殊用法)。 -
可选参数
--size带有默认值,不传参时自动使用default。 -
输入该参数不需要指定参数名称,解释器会按顺序自动赋值,指定名称的话,反而会报错。
案例 4:必填参数(required=True)
目标 :定义 -f/--food 参数为必填项,强制用户传入食物名称。
经典教学示例参考:与"必填参数"示例一致。
import argparse
parser = argparse.ArgumentParser(description="必填参数案例")
parser.add_argument('-f', '--food', type=str, required=True,
help='【必填】你喜欢的食物')
args = parser.parse_args()
print(f"你选择的食物:{args.food}")
运行演示:

关键细节说明:
-
required=True仅适用于可选参数(带-/--的参数),将其变为"必须通过名称指定"的必填项。 -
不传必填参数时,程序自动报错并退出,无需手动判断。
-
注意与位置参数的区别:位置参数本身就是必填的,无需加
required。
案例 5:设置默认值 + 限制数据类型
目标 :定义 --house 参数,限制为整数类型,并设置默认值为 0
import argparse
parser = argparse.ArgumentParser(description="默认值+类型限制案例")
parser.add_argument('--house', type=int, default=0,
help='房屋数量(整数,默认0)')
args = parser.parse_args()
print(f"房屋数量:{args.house}")
运行演示:

关键细节说明:
-
type :用于指定默认类型。
-
type=int自动将输入字符串转为整数,转换失败时报错。 -
default:用于指定默认值,如果在命令行中不指定参数值,则会使用该参数默认值
-
default=0使参数成为可选参数,不传参时值为 0。 -
设置了
default的参数,不会因为不传参而报错,这与required=True形成对比。
案例 6:开关参数(action='store_true')
目标 :定义 --debug 开关参数,无需传值,仅通过"是否传入"控制逻辑。
import argparse
parser = argparse.ArgumentParser(description="开关参数案例:调试模式控制")
parser.add_argument('--debug', action='store_true', help='开启调试模式(不传则关闭)')
args = parser.parse_args()
if args.debug:
print("✅ 调试模式已开启,输出详细日志...")
else:
print("🔴 正常运行模式,仅输出核心信息...")
运行演示:

关键细节说明:
-
action='store_true':若在命令行中未指定该参数,默认状态下其值为False;若指定该参数,该参数将置为True
-
action='store_false':若在命令行中未指定该参数,默认状态下其值为True;若指定该参数,该参数将置为False
案例 7:重定义参数变量名(dest)
目标 :参数名用 --img-path,代码中通过 args.img 调用(简化变量名)。
import argparse
parser = argparse.ArgumentParser(description="重定义参数变量名案例")
parser.add_argument('--no_warmup', dest='warmup', action='store_false')
args = parser.parse_args()
print(args.warmup)
运行演示:

关键细节说明:
-
dest用于给参数重起一个变量名 -
在命令行中通过--no_warmup传参
-
在代码中获取参数值时,使用args.warmup,使用args.no_warmup会报错
五、PyCharm 中传递 argparse 参数(新手必看)
新手常遇到"PyCharm 直接运行报参数缺失"的问题,只需 3 步配置:
-
点击 PyCharm 右上角「Edit Configurations」(运行配置);
-
在「Parameters」输入框中填写参数(如
--name 张三 --age 25); -
点击「Run」运行,参数自动传入,无需终端操作。

六、常见避坑指南
-
参数顺序问题 :位置参数(无
--)必须写在可选参数(--xxx)前面; -
类型不匹配 :如
--age传入字符串("二十")会直接报错,需确保类型一致; -
重复定义参数 :同一参数名(如
-t/--template)不能多次add_argument,否则报冲突; -
路径含特殊字符 :传入带空格 / 中文的路径时,需用引号包裹(如
--path "D:/我的文件/test.png"); -
默认值生效规则 :可选参数不传值时,自动使用
default配置的值; -
代码中访问参数 :始终使用
dest指定的名称(默认是长选项名去掉--),而不是缩写。
七、完整综合案例(多参数组合)
import argparse
parser = argparse.ArgumentParser(
description="综合案例:argparse全功能演示",
epilog="示例用法:python demo_all.py 苹果 红色 -gf Lily --age 28 --debug -s large"
)
# 位置参数
parser.add_argument('food', help='喜欢的食物(必填)')
parser.add_argument('color', help='喜欢的颜色(必填)')
# 可选参数(缩写+可选值)
parser.add_argument('-gf', '--girlfriend', choices=['Lily', 'Eva'],
help='女朋友(可选:Lily/Eva)')
# 可选参数(类型+默认值)
parser.add_argument('--age', type=int, help='年龄(整数)')
parser.add_argument('--size', '-s', default='medium', help='尺寸(默认medium)')
# 开关参数
parser.add_argument('--debug', action='store_true', help='开启调试模式')
# 类型+默认值示例
parser.add_argument('--house', type=int, default=0, help='房屋数量(默认0)')
args = parser.parse_args()
# 输出所有参数
print("===== 传入参数汇总 =====")
print(f"食物:{args.food}")
print(f"颜色:{args.color}")
print(f"女朋友:{args.girlfriend if args.girlfriend else '未指定'}")
print(f"年龄:{args.age if args.age else '未指定'}")
print(f"尺寸:{args.size}")
print(f"调试模式:{'开启' if args.debug else '关闭'}")
print(f"房屋数量:{args.house}")
八、总结
argparse 是 Python 处理命令行参数的标准方案,核心知识点可总结为:
-
参数分类 :位置参数(无
--,必填)、可选参数(--xxx,可选); -
核心配置 :
type(类型)、help(说明)、required(必填)、choices(可选值)、default(默认值)、action='store_true'(开关)、dest(重命名); -
使用逻辑:创建解析器 → 添加参数 → 解析参数 → 调用参数;
-
调试技巧 :通过
-h查看帮助,PyCharm 配置参数避免终端操作; -
注意事项 :代码中访问参数必须用完整名称(
dest),缩写仅用于命令行。
掌握 argparse 能让你的 Python 程序脱离"硬编码",适配不同场景的参数输入,是自动化脚本、深度学习训练脚本开发的必备技能。