【python】parser.add_argument()的注意事项——一个参数对应多个名字

文章探讨了在使用Python的argparse模块处理命令行参数时,缩写命名和不同命名的问题。当使用缩写命名时,例如-f和--foo,缩写必须正确且只能对应一个全名,打印时需使用全名。对于不同命名,如--imgsz和--img,它们代表同一参数,打印时应使用第一个指定的名字。作者通过示例代码展示了这些问题并邀请读者指正。
摘要由CSDN通过智能技术生成

目录

一、发现问题

1.缩写命名

2.不同命名

二、总结问题

1.缩写命名时

 2.不同命名时


一、发现问题

1.缩写命名

之前看官方文档中可以设置多个名字,如:

 但是,我发现输入参数时有问题。比如,print() 输出时,用缩写名字会报错,如 args.f 

# 文件名为11111.py
import argparse

parser = argparse.ArgumentParser(description='test')
parser.add_argument('-f', '--foo', default=20)
args = parser.parse_args()  
print(args.f)

然后在终端运行
python 11111.py -f 1

 然后我换成 args.foo

# 文件名为11111.py
import argparse

parser = argparse.ArgumentParser(description='test')
parser.add_argument('-f', '--foo', default=20)
args = parser.parse_args()  
print(args.foo)

然后在终端运行
python 11111.py -f 1

 

则运行成功,赋值为1


2.不同命名

在运行Yolov5-7.0版的时候,发现了这么一处代码:

parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w')

这显然也是多个名字,但和上面的又不太一样,因为没有缩写,全是不同的名字。

 但是这也出现了一个问题,如:用第二个名字img输出时,会报错

# 文件名为11111.py
import argparse

parser = argparse.ArgumentParser(description='test')
parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w')
args = parser.parse_args()  
print(args.img)

然后在终端运行
python 11111.py --img 1 

 

  然后我换成 args.imgsz 后

也成功运行


二、总结问题

1.缩写命名时

  • 缩写的名字和全名代表同一个名字,如-f 和 --foo 是同一个名字,
  • 缩写可以是任意缩写,但只能写一个短线,--foo的缩写可以是  -f 和 -fo 。但不能--f,否则--f等同于--foo的不同名字而不是缩写名字。
  • 但是,打印的时候要写全名
  • 可以一个名字对应多个缩写,但不要一个缩写对应多个名字。如,-f 对应 --foo 和 --foor,这样会出错。
# 文件名为11111.py
import argparse

parser = argparse.ArgumentParser(description='test')
parser.add_argument('-f', '-fo','--foo', default=20)
args = parser.parse_args()  
print(args.foo)

然后在终端运行
python 11111.py -f 1
python 11111.py -fo 1
python 11111.py -foo 1

结果是一样的

 2.不同命名时

  • 不同的名字代表同一个名字,如--imgsz和 --img 是同一个名字,
  • 但是,打印的时候要写第一个名字
# 文件名为11111.py
import argparse

parser = argparse.ArgumentParser(description='test')
parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w')
args = parser.parse_args()  
print(args.imgsz)

然后在终端运行
python 11111.py --img 1 
python 11111.py --imgsz 1 
python 11111.py --img-size 1

结果相同 


但是由于本人才疏学浅,这个问题的原因还没有找到。还请各位大佬批评指正!

参考:

(43条消息) Python中argparse.ArgumentParser()用法解析_季月三吃蛋炒饭的博客-CSDN博客
argparse --- 命令行选项、参数和子命令解析器 — Python 3.11.3 文档

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值