参数解析 Argueparse
import argparse
parse = argparse.ArgumentParser(description="ResNet based model parameters")
parse.add_argument("--data", default="CUB", type=str)
parse.add_argument("--root", default=root)
parse.add_argument("--crop_size", nargs=2, default=[300,300], type=int)
parse.add_argument("--resize", nargs=2, default=[224, 224], type=int)
parse.add_argument("--model_name", type=str, default="ResNet-50")
parse.add_argument("--mode", type=str, choices=["train","test"], default="train")
parse.add_argument("--cuda", type=str, choices=["cpu","gpu"], default="cpu")
parse.add_argument("--version_description", type=str, required=True)
args = parse.parse_args()
ArguementParse(prog, description, usage, epilog)
申请一个 参数解析 对象,
prog
: 程序名称,默认是arg[0]
,也可以自己更改usage
:参数用法description
:简述这个程序做什么epilog
:写在文档的最后
还有一些参数就不列举了或者以后更新。
一份文档大概是这样的:
usage: program.py [-h] [-c]
description:这个文档是还用来...
optional arguments:
-h : ....
-c : ...
epilog :...
parse.add_argument()
:增加参数
-
name / flag :名称或标记
这个我查了好久才明白,我太笨了。
在我们调用程序的时候,命令行可以这么写:# 长命令行 python program --size 124 # 短命令行 python program -s 124 # 直接赋值 python program 124
相应的
add_argment()
的code:parse.add_argument('-s') parse.add_argument('--size') parse.add_argument('size')
在解析后的参数列表中,就会有这个 key。
parse.add_argument("size") >> python config.py 124 print(args) >> Namespace(size='124') print(args.size) >> 124
-
action
:这个参数我用的不是很明白,一看到它,我就想到了 Qt。。。 -
nrgs
:这个也挺复杂的,这里我就只先记下,我用到的:N
:后面可以拿走几个参数
parse.add_argument("size", nargs=2) >> python config.py 124 124 print(args) >> Namespace(size=['124', '124']) print(args.size) >> ['124', '124']
注意,
-s
以及--size
的写法也相同,不赘述。 -
default
:默认值 -
type
:类型 -
choices
:对参数值做出限制,只能在提供的choices
列表 中选择参数 -
required
:表示这个参数是必须的,默认都不行 -
help
:在 optional argument 中对参数的说明 -
dest
:指定这个参数的变量名
parse.add_argument("--img", dest="image_path", type=str)
args = parse.parse_args()
print(args.image_path)
parse.parse_args(args=None, namespace=None)
-args
:这个值可以是 命令行, 也可以没有
-namespace:命名空间
参数字符从 sys.argv
中获得,进行解析后,将解析得到的变量放入 namespace
命名空间上。对于 python 的命名空间,暂时也不是很清楚。