argparse模块

使用argparse的第一步是先创建一个ArgumentParser对象,ArgumentParser对象包含了将命令行解析成为Python数据类型所需要的全部信息。创建过程如下:

parser = argparse.ArgumentParser(description=‘Process some integers.’)

位置参数和可选参数

位置参数

在学习argparse模块的时候,搞清楚命令行位置参数和可选参数这两个概念十分有必要。基于位置的参数,参数的出现不需要前缀(以 - 或 – 开头的),而且是必须配置的参数。定义argparse模块的位置参数,参数名称不要有前缀(- 或 --),argparse模块使用这个前缀来判断是位置参数,还是可选参数。
对于位置参数如果没有配置的话,就会报错:

error: the following arguments are required:

位置参数在命令行中的出现和配置顺序,与代码中参数的定义顺序是对应的。如果定义了多个位置参数,命令行输入参数的时候,顺序要与多个参数的定位顺序保持一致

可选参数

凡是用 - 或者 – 开头定义的命令行参数,都属于可选参数。里有一个约定俗成的惯例:单个字母只是用一个 - ,多个字母使用两个 - (–)。

parser = argparse.ArgumentParser()
parser.add_argument('-s','--sn')
args = parser.parse_args()
if args.sn: print(args.sn)
else: print('no argument')

这里面’-s’是’–sn’的简写。参考linux的命令行参数风格(linux命令行参数风格

添加参数

通过ArgumentParser的add_argument()方法完成。这些信息在使用parse_args()方法被调用时,被存储和使用。例如:

parser.add_argument('exp', type=str)
parser.add_argument('--name', type=str)
parser.add_argument('--batch_size',type=int, help='Batch size for training')

必须参数:

  • name or flags 命名或者一个选项字符串的列表。当parse_args()被调用时,选项会以’-‘的前缀识别,剩下的参数则会被假定为位置参数。属性名称前加上了’–’,那么这个参数就变成了可选参数,不指定的话,对应的变量被设置为None。
In [13]: parser.parse_args(['base.yaml','--name','resnet18','--batch_size','13'])
Out[13]: Namespace(batch_size=13, exp='base.yaml', name='resnet18')
  • type命令行参数被转换成的类型。
  • action,将命令行参数与动作相关联。python提供的动作有下面几种,'store’存储参数的值,默认的动作。‘store_true’和’store_false’存储True和False值的特殊用例,'append’存储一个列表,并且每个参数追加到列表中。更多的动作参考:action
  • default,默认的值为None,指定该参数的默认值。
  • help包含对该参数的一个简单描述,为字符串。在用户请求帮助的时候展示。(通过命令行中使用-h的方式请求帮助)
  • nargs。N (一个整数)。命令行中的 N 个参数会被聚集到一个列表中。’?’。如果可能的话,会从命令行中消耗一个参数,并产生一个单一项(0或者1个参数)。如果当前没有命令行参数,则会产生 default 值。’*’。所有当前命令行参数被聚集到一个列表中(0或者1个参数)。注意通过 nargs=’*’’+’。和 ‘*’ 类似,所有当前命令行参数被聚集到一个列表中。另外,当前没有至少一个命令行参数时会产生一个错误信息(至少一个参数)。
  • dest。设置参数在代码中的变量名。argparse默认的变量名是–或-后面的字符串,但是你也可以通过dest=xxx来设置参数的变量名,然后在代码中用args.xxx来获取参数的值。
>>> parser.add_argument('--foo', nargs='*')
>>> parser.add_argument('--bar', nargs='*')
>>> parser.add_argument('baz', nargs='*')
>>> parser.parse_args('a b --foo x y --bar 1 2'.split())
Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])

解析参数

使用parse_args()方法解析参数。通常脚本中该方法不需要传入参数。会自动将参数字符串转换为对象,并将其设为命名空间的属性。返回带有成员的命名空间。

args = parser.parse_args()

使用参数

一旦被parse_args()方法解析后,可以通过arg.参数名的方式得到这个参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值