python中参数解析器


记录一下argparser中的常用选项,作为备查表。 核心就是parser.add_argument方法的各项参数 有- – 的表示的optional参数,没有- – 的是位置参数。类似python函数的参数的情况。

action

表示一个参数如何被处理。

store

仅仅表示存储该参数的值,这是默认的处理方法

store_const

表示有该参数时,存储add_argument中const字段的值。如果没有该参数,则存储None

适用于flag类型的参数,比如–male –female 之类的。此时必须明确指定const字段

store_true store_false

是store_const的便利方法,可以省去const。

store_true时,有该参数存储True, 没有该参数存储False,这一点是和store_const没有时存储None不同的。

append

表示该参数可以在命令行中出现多次,每次的value会存储到一个list中。

append_const

除了有append的基本语义外,有该参数时,存储const中的值到list中,如果没有该参数,则不存储该参数。

这个store_const会存储None的行为是不同的。该参数也必须配合const字段使用。

count

表示对命令行中参数出现的次数进行计数, value即使数量,一般要设置一个默认值

version

用来提供程序版本查询的,有该参数时,直接给出版本信息,然后退出。

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--version', action='version', version='%(prog)s 2.0')
parser.parse_args(['--version'])

extend

和append很像,只不是过是用extend的方法将每个参数的值加入list中。

choices

用来限制某个参数的可用值。

parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
parser.add_argument('door', type=int, choices=range(1, 4))

需要注意的是,当参数中声明了type时,choices中的值要符合type的类型定义。

default

提供参数的默认值,和const的区别是,const通常和带有const的action一同使用。default属于一般情况。可以把const看做特殊情况下的default 需要注意的是,如果default提供的是字符串,并且提供了type参数,必须确保该字符串能够转化成相应的type。 如果default提供的不是字符串,并且也有type字段,则不会进行type字段的检查了。

dest

声明解析后的参数名称。 默认情况下,parser会自己决定解析后的参数名称,解析规则是,去掉参数前面的–,如果没有长参数形式提供,则进一步去掉短参数前面的-。然后,剩余的字符串中的-会被替换成_。确保这是一个有效的属性名称。

metavar

用来展示帮助信息时,确定每个参数接受的值。

parser.add_argument('-x', nargs=2, metavar=("X1", "X2"))
parser.print_help()
usage: PROG [-h] [-x X1 X2]

可以从帮助信息上明确地看出来-x参数需要两个值,这个就是靠的metavar

nargs

N integer

表示N个参数值会被收集到一个list中。

如果命令行中没有该参数,则使用default的值,如果有该参数,但是没有提供值,则使用const中的值。

parser = argparse.ArgumentParser()

parser.add_argument('--foo', nargs='?', const='c', default='d')

parser.add_argument('bar', nargs='?', default='d')
parser.parse_args(['XX', '--foo', 'YY'])
输出Namespace(bar='XX', foo='YY')

parser.parse_args(['XX', '--foo'])
输出Namespace(bar='XX', foo='c')

parser.parse_args([])
输出Namespace(bar='d', foo='d')

*

表示多个参数值将被收集到一个list中。这里是指一个参数后面多个值,和append还是不一样,append是一个参数收集一个值,可以多个参数。

当然,如果位置参数用了该参数,则只需要声明一个就够,所有的位置参数值都会收集到这个参数名下。

+

和*很像,要求至少有一个参数值。


原创文章,转载请注明出处,否则拒绝转载!
本文链接:抬头看浏览器地址栏

上篇: pytorch实现transformer极简代码
下篇: python中的编解码