目录
一、发现问题
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 文档