关于Python参数解析器argparse的应用场景

 更新时间:2023年08月03日 11:34:38   作者:Taylor不想被展开  
这篇文章主要介绍了关于Python参数解析器argparse的应用场景,argparse 模块使编写用户友好的命令行界面变得容易,程序定义了所需的参数,而 argparse 将找出如何从 sys.argv 中解析这些参数,需要的朋友可以参考下

一、什么是argparse

argparse 是一个用来解析命令行参数的 Python 库,它是 Python 标准库的一部分。

argparse 模块使编写用户友好的命令行界面变得容易

程序定义了所需的参数,而 argparse 将找出如何从 sys.argv 中解析这些参数。

argparse 模块还会自动生成帮助和使用消息,并在用户为程序提供无效参数时发出错误。

简而言之,就是汇总函数接口,方便传参。

二、argparse的使用场景

在深度学习代码中,特别是在train.py或test.py中,argparse最常被使用。

因为在这些文件中,通常要对其他.py文件中定义的class或function进行调用,因此必然要传入大量的参数,如果不对这些参数进行集中编写,那么在冗长的代码中去找参数的定义位置或传参的位置将会十分麻烦。

argparse为用户提供了集中编写所需参数的机会,下面的使用教程中我会结合简单而具体的例子进行说明。

三、argparse的使用流程

1.创建一个解析器

即创建 ArgumentParser() 对象

parser = argparse.ArgumentParser(description='test')

description:大多数对 ArgumentParser 构造方法的调用都会使用 description= 关键字参数。

这个参数简要描述这个程度做什么以及怎么做。

在帮助消息中,这个描述会显示在命令行用法字符串和各种参数的帮助消息之间。

2.添加参数

即调用 add_argument() 方法添加参数

parser.add_argument('--binary', action='store_true', default=False, help='action=store_true表示默认为False,当在命令行中使用--binary时自动变为True')
parser.add_argument('--number', type=int, default=6, help='普通数据,type可指定类型.')
parser.add_argument('--epochs', type=int, default=300, help='Number of epochs to train.')

这里说一下如何定义参数的格式,可以暂时略过不看,粗体部分为比较常用的参数,其实每个都很常用:

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

各个参数解释如下:

  • name or flags:选项字符串的名字或者列表,例如 foo 或者 -f, --foo; action:命令行遇到参数时的动作,默认值是 store; store_const:表示赋值为const;
  • default :不指定参数时的默认值。
  • type:命令行参数应该被转换成的类型;
  • choices:参数可允许的值的一个容器;
  • nargs :应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。
  • required:可选参数是否可以省略 (仅针对可选参数)。
  • help:参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.
  • metavar:在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称
  • dest:解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.
  • const:action 和 nargs 所需要的常量值。
  • append:将遇到的值存储成列表,也就是如果参数重复则会保存多个值; append_const:将参数规范中定义的一个值保存到一个列表;
  • count:存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;

3.解析参数

即使用 parse_args() 解析添加的参数

args = parser.parse_args()

4.简单而具体的例子

例如我现在有一个.py文件,我现在定义了好多好多函数(为了方便我只定义了两个),我现在需要集中管理我传入的参数,使用argparse就会非常方便,对于本.py文件中的传参一目了然。

import argparse
parser = argparse.ArgumentParser(description='test')
parser.add_argument('--spring', action='store_true', default=False, help='nothing.')
parser.add_argument('--summer', type=int, default=6, help='num.')
parser.add_argument('--fall', type=int, default=11, help='num.')
parser.add_argument('--winter', type=int, default=100, help='Number of epochs to train.')
args = parser.parse_args()
# FLAGS, unparsed = parser.parse_known_args() 这种解析方法用的比较少,有兴趣可以了解一下
def sum_function(num2sum_1,num2sum_2):
    sum_result = num2sum_1 + num2sum_2
    return sum_result
def multiply_function(num2multiply_1,num2multiply_2):
    multiply_result = num2multiply_1 * num2multiply_2
    return multiply_result
print('args.spring的值是{}'.format(args.spring))
print('args.summer的值是{}'.format(args.summer))
print(sum_function(args.summer,args.fall))
print(multiply_function(args.summer,args.winter))

# 运行结果
args.spring的值是False
args.summer的值是6
17
600

你可以发现,对本文件中的函数进行传参,无论有多少参数需要传,我们只要在argparse中写好需要传的参数,在传参时传入args.参数名,需要修改传参值时,统一在argparse中进行修改即可,这样就方便了参数的管理。

5.如何修改参数值

  • 第一,对于有default的参数,直接修改default的值即可;
  • 第二,用命令行运行,例如在上面举例的程序,我如果想把summer的值改为10,fall的值改为20,那么命令行指令就是:python train.py --summer 10 --fall 20;如果我同时还想让spring的值成为True,那么命令行指令为:python train.py --summer 10 --fall 20 --spring

运行结果:
args.spring的值是True
args.summer的值是10
30
1000

  • 第三,在Edit Configurations中进行配置,然后run即可:

到此这篇关于关于Python参数解析器argparse的应用场景的文章就介绍到这了,更多相关Python的argparse的应用场景内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)

    python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)

    在python中能够进行html和xhtml的库有很多,如HTMLParser、sgmllib、htmllib、BeautifulSoup、mxTidy、uTidylib等,这里介绍一下HTMLParser、BeautifulSoup等模块
    2014-06-06
  • Python实现AI自动玩俄罗斯方块游戏

    Python实现AI自动玩俄罗斯方块游戏

    提到《俄罗斯方块》,那真是几乎无人不知无人不晓。其历史之悠久,可玩性之持久,能手轻轻一挥,吊打一大波游戏。本文将利用Python实现俄罗斯方块进阶版—AI自动玩俄罗斯方块,感兴趣的可以学习一下
    2022-03-03
  • 端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

    端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

    端午节快要到了,旅游?回家?拜访亲友?少不了要带上粽子.那么:选择什么牌子的粽子呢?选择什么口味的粽子呢?选择什么价格区间呢?今天爬取了京东上面的 “粽子数据” 进行分析,看看有啥发现吧!,需要的朋友可以参考下
    2021-06-06
  • django使用haystack调用Elasticsearch实现索引搜索

    django使用haystack调用Elasticsearch实现索引搜索

    这篇文章主要介绍了django使用haystack调用Elasticsearch实现索引搜索,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python如何遍历指定路径下所有文件(按按照时间区间检索)

    python如何遍历指定路径下所有文件(按按照时间区间检索)

    这篇文章主要给大家介绍了关于python如何遍历指定路径下所有文件(按按照时间区间检索)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python3下实现搜狗AI API的代码示例

    python3下实现搜狗AI API的代码示例

    这篇文章主要介绍了python3下实现搜狗AI API的代码示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • python pandas库的安装和创建

    python pandas库的安装和创建

    这篇文章主要介绍了python pandas库的安装和创建,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Python 实现简单的电话本功能

    Python 实现简单的电话本功能

    这篇文章主要介绍了Python 实现简单的电话本功能的相关资料,包括添加联系人信息,查找姓名显示联系人,存储联系人到 TXT 文档等内容,十分的细致,有需要的小伙伴可以参考下
    2015-08-08
  • scrapy中如何设置应用cookies的方法(3种)

    scrapy中如何设置应用cookies的方法(3种)

    这篇文章主要介绍了scrapy中如何设置应用cookies的方法(3种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python实现web邮箱扫描的示例(附源码)

    python实现web邮箱扫描的示例(附源码)

    这篇文章主要介绍了python实现web邮箱扫描的示例(附源码),帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03

最新评论