2022-10-19 03:48:12
argparse 是 Python 内置的命令行参数解析模块,用于从命令行接收参数并转换为程序可用的变量。以下是对代码的详细解析及扩展说明:
代码解析import argparse# 1. 创建解析器对象parser = argparse.ArgumentParser(description="Demo of argparse")# 2. 添加参数parser.add_argument("--n_workers", type=int, default=-1) # 可选参数,默认值-1parser.add_argument("--gpu", dest="gpu", action="store_true") # 标志参数,出现时为Trueparser.add_argument("--input", type=int, default=66) # 可选参数,默认值66# 3. 解析命令行输入args = parser.parse_args()# 4. 使用参数print("n_workers:", args.n_workers)print("gpu:", args.gpu)print("input:", args.input)关键点说明ArgumentParser 对象
description:帮助文档的描述信息(通过 -h 或 --help 查看)。
add_argument() 方法
--n_workers
类型为 int,默认值 -1。若命令行未指定,则使用默认值。
--gpu
action="store_true":表示该参数是标志(flag),出现时值为 True,否则为 False。
dest="gpu":指定参数在 args 中的属性名(可省略,默认用 --gpu 去横线后命名)。
--input
类型为 int,默认值 66。若命令行指定(如 --input 88),则覆盖默认值。
parse_args()
解析命令行输入,返回命名空间对象 args,通过 args.参数名 访问值。
无额外参数时
python argparse_study.py输出:n_workers: -1 # 默认值gpu: False # 未指定 --gpuinput: 66 # 默认值
指定 --gpu 时
python argparse_study.py --gpu输出:gpu: True # 标志参数生效
指定 --input 时
python argparse_study.py --input 88输出:input: 88 # 覆盖默认值
必选参数去掉参数前的 -- 并设置 required=True:
parser.add_argument("input_file", type=str, help="必选的位置参数")调用时需直接提供值:
python script.py data.txt参数选择使用 choices 限制参数取值范围:
parser.add_argument("--mode", choices=["train", "test"], default="train")多值参数通过 nargs 接收多个值:
parser.add_argument("--ids", type=int, nargs="+", help="接收一个或多个整数")调用示例:
python script.py --ids 1 2 3帮助信息运行 -h 查看自动生成的帮助文档:
python argparse_study.py -h输出示例:
usage: argparse_study.py [-h] [--n_workers N_WORKERS] [--gpu] [--input INPUT]Demo of argparseoptional arguments: -h, --help show this help message and exit --n_workers N_WORKERS --gpu --input INPUT参数未生效?
检查参数名是否匹配(如 --gpu 不能写成 -gpu)。
确保 parse_args() 在添加所有参数后调用。
类型转换错误?
若输入值无法转换为指定类型(如 --input abc),会抛出 argparse.ArgumentTypeError。
默认值覆盖问题
默认值仅在命令行未指定时生效,显式指定会覆盖默认值。
掌握这些用法后,可以高效地编写兼容命令行交互的 Python 程序。