深入理解argparse模块中的add_argument的参数(如action等)

文章目录

      • 简单使用
      • 用户指定参数
      • 参数
      • 高级用法
      • 用户指定参数(特殊)

简单使用

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等等,其各自有什么用呢?

  1. 第一个"-x",只作为python系统读取输入时的简写。
  2. 第二个"–xxx",作为这个参数的真正名字,即使用这个参数的时候为args.xxx,而不是args.x。
  3. default,即这个参数的默认值。
  4. type,参数的数据类型,例如int,float,str,list等。
  5. required,默认为false,如果为true,并且没有默认值,表示这个参数用户必须指定,否则程序报错。
  6. action,action=‘store_true’/‘store_false’。使用这个选项的参数必须为布尔变量。其中store_true表示:用户指定了这个参数,那么这个参数就为true。什么叫用户指定了?例如上面这个特殊的例子,python main.py -x,其指定了x,那么x就会变成True。同理store_false。用户如果没有指定,就看默认值,如果没有默认值,那么就是相反的情况,即如果action=store_true,但是默认就是False。
  7. choice,即参数的取值范围,可以帮你自动判断是否越界。例如[1,2],表示只可以取值1或者2。
  8. help,参数的解释,相当于是注释作用,怕自己忘了。
  9. nargs,取值可以是[“*”,“+”,正整数]等,就是说这个参数是一个列表,"*"表示任意个参数。“+”表示至少一个参数。正整数表示这么多个参数。假设这个参数名字叫做people,且nargs=2。那么命令如下:python main.py --people x y。那么people=[“x”,“y”]。

本文只说了一些常见的参数以及函数。

其实还有一些其他参数,这里不一一列举,再比如 nargs的取值还可以是“?"。这些具体什么含义,以及例子,强烈推荐大家参考python的官方文档https://docs.python.org/3/。这个东西永远是最好的。

深入理解argparse模块中的add_argument的参数(如action等)_第1张图片

深入理解argparse模块中的add_argument的参数(如action等)_第2张图片

高级用法

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]

你可能感兴趣的:(python,python,开发语言)