当前位置: 首页 > news >正文

argparse

argparse.add_argument 完全指南

🧱 基础篇:命令行参数解析入门

1. 模块初始化

import argparse# 创建参数解析器(所有操作的基础容器)
parser = argparse.ArgumentParser(
prog='MyApp', # 程序名称(默认从sys.argv[0]获取)
description='数据处理器',
epilog='示例: python app.py input.txt --mode fast'
)

2. 参数类型解析

位置参数(Positional Arguments)
# 必须按顺序提供的参数(无前缀)
parser.add_argument(
'input_file', # 参数名称
type=str, # 自动类型转换
help='输入文件路径'
)

▶ 调用方式:

python app.py data.csv # data.csv 赋值给 args.input_file
可选参数(Optional Arguments)

# 通过 - 或 -- 标识的参数(顺序无关)
parser.add_argument(
'-m', '--mode', # 短参数 + 长参数
choices=['fast', 'slow'],
default='fast',
help='运行模式(默认: fast)'
)

▶ 调用方式:

python app.py data.csv --mode slow

🔧 核心参数详解

参数作用描述高级特性说明
dest结果字典中的属性名默认自动生成(如 --mode → mode)
type类型强制转换支持自定义函数(见进阶篇)
nargs参数值的数量规则?*+数字
const与action配合使用的常量值常用于标志型参数
metavar帮助文档中显示的参数值占位符默认用大写参数名(如 MODE)

代码示例:复杂参数定义

parser.add_argument(
'--range',
type=float,
nargs=2, # 必须提供两个值
metavar=('MIN', 'MAX'),
help='取值范围(示例: --range 0.5 2.0)'
)

▶ 调用结果:

args.range[0.5, 2.0]

🚀 进阶篇:高级应用场景

场景1:动态参数处理

自定义类型验证
def valid_percentage(value):v = float(value)if not (0 <= v <= 1):raise argparse.ArgumentTypeError('必须在0-1之间')return vparser.add_argument(
'--threshold',
type=valid_percentage, # 使用自定义验证函数
default=0.5
)
自定义 Action 类
class UpperCaseAction(argparse.Action):def call(self, parser, namespace, values, option_string=None):setattr(namespace, self.dest, values.upper())parser.add_argument(
'--text',
action=UpperCaseAction, # 自动转为大写
type=str
)

场景2:复合参数结构

子命令系统(类似git)
subparsers = parser.add_subparsers(title='commands', dest='command')# 创建子解析器
parser_train = subparsers.add_parser('train', help='训练模式')
parser_train.add_argument('--epochs', type=int)parser_test = subparsers.add_parser('test', help='测试模式')
parser_test.add_argument('--batch-size')

▶ 调用方式:

python app.py train --epochs 50
python app.py test --batch-size 32

场景3: 处理路径参数

# 使用Path对象(Python 3.6+)
from pathlib import Path
parser.add_argument('--dir', type=Path)

⚠️ 避坑指南

# 错误:短参数重复定义
parser.add_argument('-v', ...)
parser.add_argument('-v', ...)  # 触发ArgumentError  
# 布尔参数的正确姿势
parser.add_argument("--verbose", action="store_true", help="显示详细信息")
# 推荐写法(互斥组)
group = parser.add_mutually_exclusive_group()
group.add_argument('--enable', action='store_true')
group.add_argument('--disable', action='store_false', dest='enable')

转义字符:

  • 若参数值包含 *、# 等符号,需在代码中用 \ 转义。
  • 示例:parser.add_argument(“–filter”, help=“过滤模式(如 *.txt)”)。

参数顺序:

  • 使用 nargs=argparse.REMAINDER 时,必须将其作为最后一个参数定义,否则后续参数无法解析。

💡 最佳实践:使用 argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) 可在帮助信息中显示默认值


http://www.mrgr.cn/news/98609.html

相关文章:

  • 子函数嵌套的意义——以“颜色排序”为例(Python)
  • Python抽象基类
  • Function Calling是什么?
  • CS5346 - CHARTS: Chart with Point / Bar / Line / Box
  • 神经光子渲染:物理级真实感图像生成——从麦克斯韦方程到深度学习
  • Windows安装Ollama并指定安装路径(默认C盘)
  • Godot学习-创建简单动画
  • RK3568 更换显示logo
  • 人形机器人动作策略 ∼ 人类动作策略
  • 确保连接器后壳高性能互连的完整性
  • 从零到一:网站设计新手如何快速上手?
  • 关于系统架构思考,如何设计实现系统的高可用?
  • Spring Boot一次接口请求涉及的完整执行链路
  • 【Pandas】pandas DataFrame tail
  • 解决靶机分配的 IP 地址与 Kali 机器静态 IP 地址冲突的方法
  • MyBatis 如何使用
  • 实用类题目
  • 【软件工程大系】净室软件工程
  • SageAttention2
  • 基于AD9767高速DAC的DDS信号发生器