简单使用
import argparse
parser = argparse.ArgumentParser(description="Deep Gaussian Processes on MNIST")
parser.add_argument("-n", "--num-epochs", default=5, type=int)
parser.add_argument("-t", "--num-iters", default=60, type=int)
parser.add_argument("-b", "--batch-size", default=1000, type=int)
parser.add_argument("-lr", "--learning-rate", default=0.01, type=float)
args = parser.parse_args()
print(args.num_epochs)
输出结果:
5
用户指定参数
接着上面的例子,假设这个python文件的名字叫做main.py。我们如果需要在运行时改变参数的值,可以如下:
python main.py -n 6 -t 100#将参数n,t的值都由默认值改成了6,100。
python main.py --num-epochs 6 --num-iters 100#等价形式
下面这个不是开头的那个例子,其比较特殊,但是后面会用到。
python main.py -x
可以看到,其特殊之处在于后面没有跟需要指定的值。先透露一下,其实这个我们并不少见,回想linux的风格即可。
参数
从上面我们可以看到add_argument
有很多的接口选项,例如default,type
等等,其各自有什么用呢?
- 第一个"-x",只作为python系统读取输入时的简写。
- 第二个"–xxx",作为这个参数的真正名字,即使用这个参数的时候为args.xxx,而不是args.x。
- default,即这个参数的默认值。
- type,参数的数据类型,例如int,float,str,list等。
- required,默认为false,如果为true,并且没有默认值,表示这个参数用户必须指定,否则程序报错。
- action,action=‘store_true’/‘store_false’。使用这个选项的参数必须为布尔变量。其中store_true表示:用户指定了这个参数,那么这个参数就为true。什么叫用户指定了?例如上面这个特殊的例子,python main.py -x,其指定了x,那么x就会变成True。同理store_false。用户如果没有指定,就看默认值,如果没有默认值,那么就是相反的情况,即如果action=store_true,但是默认就是False。
- choice,即参数的取值范围,可以帮你自动判断是否越界。例如[1,2],表示只可以取值1或者2。
- help,参数的解释,相当于是注释作用,怕自己忘了。
- nargs,取值可以是[“*”,“+”,正整数]等,就是说这个参数是一个列表,"*"表示任意个参数。“+”表示至少一个参数。正整数表示这么多个参数。假设这个参数名字叫做people,且nargs=2。那么命令如下:python main.py --people x y。那么people=[“x”,“y”]。
本文只说了一些常见的参数以及函数。
其实还有一些其他参数,这里不一一列举,再比如 nargs的取值还可以是“?"。这些具体什么含义,以及例子,强烈推荐大家参考python的官方文档https://docs.python.org/3/。这个东西永远是最好的。
高级用法
1.利用字典给args批量添加参数:
arg_dict = args.__dict__
arg_dict.update(my_dict)#更改这个字典就等价于更改args,十分方便。
用户指定参数(特殊)
有一些type的参数,用户指定参数会比较特殊,例如type为list类型时:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--alpha', type=list, default=[0.35, 0.25, 0.40])
args = parser.parse_args()
这个时候,你动态传入参数如下:
python test.py --alpha [1,2,3]
哈哈,这样子是错误的,系统最终默认得到的会是:
['[','1',',','2',',','3',']']
对的,其会将每一个字符都当作list中的元素。所以,如果你非要像上面这么写,那么你就需要自己“后处理”,否则建议你改成如下形式:
parser.add_argument('--alpha', nargs='+',type=int)
然后就可以了,如何指定参数。
python test.py --alpha 1 2 3
我们得到的alpha就会是如下:
[1,2,3]