argparse.ArgumentParser() 用法解析

这篇具有很好参考价值的文章主要介绍了argparse.ArgumentParser() 用法解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明

本文借阅了各网站大佬的经验,已将原文附 Reference 部分,再此表达最诚挚的谢意,如有侵权,本人立即删除!

  • argparse 模块

  1. argparse 是一个 Python 模块:命令行选项、参数和子命令解析器。

  2. argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

  • 使用流程

    1. 创建解析器

    parser = argparse.ArgumentParser(description='Process some integers.')
    

    使用 argparse 的第一步是创建一个 ArgumentParser 对象。
    ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。

    2. 添加参数

    parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator')
    

    给一个 ArgumentParser 添加程序参数信息是通过调用 add_argument() 方法完成的。

    3. 解析参数

    >>> parser.parse_args(['--sum', '7', '-1', '42'])
    Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42])
    

    ArgumentParser 通过 parse_args() 方法解析参数。

  • ArgumentParser 对象

    class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True)
    
    • prog - 程序的名称(默认:sys.argv[0])
    • usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
    • description - 在参数帮助文档之前显示的文本(默认值:无)
    • epilog - 在参数帮助文档之后显示的文本(默认值:无)
    • parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内
    • formatter_class - 用于自定义帮助文档输出格式的类
    • prefix_chars - 可选参数的前缀字符集合(默认值:’-’)
    • fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值:None)
    • argument_default - 参数的全局默认值(默认值: None)
    • argument_default - 参数的全局默认值(默认值: None)
    • add_help - 为解析器添加一个 -h/–help 选项(默认值: True)
    • allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:True)
  • add_argument() 方法

    ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
    
    • name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
    • action - 当参数在命令行中出现时使用的动作基本类型。
    • nargs - 命令行参数应当消耗的数目。
    • const - 被一些 action 和 nargs 选择所需求的常数。
    • default - 当参数未在命令行中出现时使用的值。
    • default - 当参数未在命令行中出现时使用的值。
    • choices - 可用的参数的容器。
    • required - 此命令行选项是否可省略 (仅选项可用)。
    • help - 一个此选项作用的简单描述。
    • metavar - 在使用方法消息中使用的参数值示例。
    • dest - 被添加到 parse_args() 所返回对象上的属性名。

实例分析

1. 基本使用

       ~~~~~~        当我们执行某个 Python 代码,例如文件 mycode.py 时,想要传递一些可以随时改变的自定义的参数。比如在训练神经网络的时候,我们为了方便修改训练的 batch 大小,epoch 的大小等等,往往不想去动代码。此时最方便的方法就是在执行代码的时候从命令行传入参数。argparse.ArgumentParser() 可以很好地满足这一需求。

import argparse
 
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number", type=int)
args = parser.parse_args()
print(args.square**2)

       ~~~~~~        改代码首先创建一个 ArgumentParser 对象,添加参数 square,最后采用方法 parser.add_argument。每添加一个参数,就需要调用一次该方法。args = parser.parse_args() 则是使得改代码生效。执行这段代码时,我们在命令行输入

argparse.argumentparser,# Python,python,人工智能,开发语言

python mycode.py 9

可以得到输出结果是 9 的平方,即 81。

当然,添加多个参数时,执行的时候顺序输入这些参数。例如 mycode.py 中是如下代码:

import argparse
 
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number", type=int)
parser.add_argument("number", help="display a given number", type=int)
args = parser.parse_args()
print(args.square**2)
print(args.number)

我们在命令行输入:

python mycode.py 20 999

输出:

400
999

2. parser.print_help()

argparse.ArgumentParser():创建对象

parser = argparse.ArgumentParser(description='PyTorch MNIST pruning from deep compression paper')
parser.add_argument("square", help="display a square of a given number", type=int)
parser.add_argument("number", help="display a given number", type=int)
args = parser.parse_args()
print(args.square**2)
print(args.number)
parser.print_help()

其中 parser.print_help() 的功能是我们创建的 parser 的相关信息。命令行输入:

400
999
usage: day1.py [-h] square number

PyTorch MNIST pruning from deep compression paper

positional arguments:
  square      display a square of a given number
  number      display a given number

optional arguments:
  -h, --help  show this help message and exit

可以看到,description 中的文字也得到了输出。

parser.add_argument():添加参数
parser.add_argument():可配置的参数比较多,第一个是name,也就是名称。前面的例子中,我们用了

parser.add_argument("square", help="display a square of a given number", type=int)

3. name 参数

       ~~~~~~        其中 “square” 就是传递给 name 的参数(也可以单引号的 ’square’ )。这里还有个 help 参数,他和argparse.ArgumentParser() 中的 description 类似,没有实际作用,起到一个注释的作用,会在 parser.print_help() 后打印出来。而显然 type 参数指定了输入参数的类型,int 是整数,float 是浮点,str 是字符串。
   回到 name 参数,他除了可以直接用上面的 square 字符串,也可以一个横杠加字符串以及两个横杠加字符串,例如 ’-sqaure’ 和 ’–square’ 。常见的是两个横杠的写法。下面来说说我个人发现的区别。没有横杠的写法,如我们前面所示,在命令行传入参数的时候,不需要重写名字,直接输入参数:

python mycode.py 20 999

但是假如使用两个横杠的 name,直接传入参数会报错,需要在传入参数的时候重写 name。例如下列代码

parser = argparse.ArgumentParser(description='PyTorch MNIST pruning from deep compression paper')
parser.add_argument("--square", help="display a square of a given number", type=int)
parser.add_argument("--number", help="display a given number", type=int)
args = parser.parse_args()
print(args.square**2)
print(args.number)

命令行执行时需要

python mycode.py --square 20 --number 999

另外一个需要提到的点是name的取名时,字符串中的横杠和下划线似乎是等价的。例如

parser.add_argument('--batch_size', type=int, default=50)

parser.add_argument('--batch-size', type=int, default=50)

是等价的。但是传递参数的时候,name是横杠也得用横杠;name是下划线也得用下划线:

parser.add_argument('--batch_size', type=int, default=50)

$ python mycode.py --batch_size 128

或者

parser.add_argument('--batch-size', type=int, default=50)

$ python mycode.py --batch-size 128

调用的时候统一用下划线:

print(args.batch_size)

个人建议传递 name 的时候还是用下划线别用横杠,方便查找。这里 default 用于定义没有传递参数时,该参数的默认值。需要注意的是,name 参数用横杠的名称的时候设置default 值,命令行执行程序的时候可以不传入参数或者传入部分参数,没传入的参数使用默认值;name 参数用没有横杠的名称的时候,必须传入参数。

4. action 参数

下面的 parser.add_argument() 用到了 action 参数:

parser.add_argument('--no-cuda', action='store_true',help='disables CUDA training')

action='store_true’ 表示如果我们在命令行配置这个参数,则该参数为 True;不配置则默认为 False。类似的 action='store_false’ 表示如果我们在命令行配置这个参数,则该参数为 False;不配置则默认为 True。配置 action 类型的参数不需要传入具体的数值或者字符串,例如上例中,只需要

python mycode.py ----no-cuda

则表示对该参数进行了配置,他会被设为 True。更多 action 的类型可以参考官方文档

5. metavar 参数

metavar 参数只对用 parser.print_help() 打印参数信息的时候会有影响,并不影响程序的其他功能。例如

parser = argparse.ArgumentParser(description='PyTorch MNIST pruning from deep compression paper')
parser.add_argument('--batch_size', type=int, default=50, 
                    help='input batch size for training (default: 50)')
args = parser.parse_args()
parser.print_help()

打印结果为:

usage: day1.py [-h] [--batch_size BATCH_SIZE]

PyTorch MNIST pruning from deep compression paper

optional arguments:
  -h, --help            show this help message and exit
  --batch_size BATCH_SIZE
                        input batch size for training (default: 50)

假如设置 metavar 参数:

parser = argparse.ArgumentParser(description='PyTorch MNIST pruning from deep compression paper')
parser.add_argument('--batch_size', type=int, default=50, metavar='N',
                    help='input batch size for training (default: 50)')
args = parser.parse_args()
parser.print_help()

打印结果为

usage: day1.py [-h] [--batch_size N]

PyTorch MNIST pruning from deep compression paper

optional arguments:
  -h, --help      show this help message and exit
  --batch_size N  input batch size for training (default: 50)

可见,只是改变了一些参数的显示。

6. nagrs 参数

为传递多个参数,可以用 nagrs。当 nargs 为 1 时,有且只能传入一个参数:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--one', nargs=1, required=True)
args = parser.parse_args()
print(args.one)

输出

python mycode.py --one  1
['1']

当 nargs 为其他数值,例如3时,表示必须传入3个参数:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--three', nargs=3, required=True)
args = parser.parse_args()
print(args.three)

输出

python mycode.py --three  1 2 3
['1', '2', '3']

当设置了 nargs 参数,则输出是一个 list。

7. dest 参数

dest 参数可以改变 argparse.ArgumentParser() 对应的参数调用时候的名称。例如下面这一段

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

如果第二个参数没有 dest=‘accumulate’,则在调用的时候,最后一行代码只能是

print(args.sum(args.integers))

dest 使得它在调用的时候被改名。但要注意在命令行传入参数的时候仍然是用name的字符串,即–sum。

Reference

[1] 官方文档

[2] 命令行传递参数 argparse.ArgumentParser解析

[3] argparse.ArgumentParser()用法解析文章来源地址https://www.toymoban.com/news/detail-694574.html

到了这里,关于argparse.ArgumentParser() 用法解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 22 Python的argparse模块

    概述         在上一节,我们介绍了Python的datetime模块,包括:datetime模块中一些常用的属性和函数。在这一节,我们将介绍Python的argparse模块。argparse模块是Python的一个标准库,用于编写命令行界面。它可以处理命令行参数和选项,并生成帮助和使用信息。         该

    2024年02月07日
    浏览(49)
  • 常用python代码大全-python使用argparse模块处理命令行参数

    argparse 是 Python 的一个标准库模块,用于从命令行解析参数。这个模块使编写用户友好的命令行接口变得更加简单。下面是一个使用 argparse 模块处理命令行参数的示例代码: 在这个示例中,我们首先导入了 argparse 模块。然后,我们创建了一个 ArgumentParser 对象,它代表我们的

    2024年02月01日
    浏览(42)
  • 【Python】np.clip()用法解析

    np.clip() 是一个截取函数,用于截取数组中小于或者大于某值的部分,并使得被截取部分等于固定值。 参数说明 a : 输入的数组 a_min: 限定的最小值 也可以是数组 如果为数组时 shape必须和a一样 a_max:限定的最大值 也可以是数组 shape和a一样 out:剪裁后的数组存入的数组 【1】

    2024年02月07日
    浏览(37)
  • Python的切片操作详细用法解析

    在利用Python解决各种实际问题的过程中,经常会遇到从某个对象中抽取部分值的情况,切片操作正是专门用于完成这一操作的有力武器。理论上而言,只要条件表达式得当,可以通过单次或多次切片操作实现任意切取目标值。切片操作的基本语法比较简单,但如果不彻底搞清

    2024年02月02日
    浏览(49)
  • Python之使用argparse在命令行读取文件

    关于argparse之parser.add_argument()的用法,这篇文章有较为详细的讲解。因为作业需要,我需要在命令行读入txt文件,网上看了不少博客,都没有直接介绍,而小白在自己尝试的过程中踩了不少坑,尽管做法很简单。这里记在这里。 1.在Python的shell中写一个 ArgparseTry.py 文件,其中

    2023年04月08日
    浏览(80)
  • chatgpt赋能python:Python等待一秒:介绍和用法全解析

    在编写Python脚本时,我们通常要让程序暂停一段时间,这可以通过让程序等待一定的时间来实现。等待时间可以是任意长度的时间,最常见的时间单位是秒。Python中等待一秒的方法非常简单,只需要使用time库中的sleep()方法即可。 使用Python等待一秒非常简单,只需要在代码中

    2024年02月11日
    浏览(38)
  • python argparse传入布尔参数不生效的解决方法

    在一个需要用到flag作为信号控制代码中一些代码片段是否运行的,比如\\\"--flag True\\\"或者\\\"--flag False\\\"。 但是古怪的是无法传入False,无论传入True还是False,程序里面都是True的参数,所以这个flag并没有生效,也就失去了意义。 参考代码: 执行上面的代码:python3 test.py --flag False

    2024年02月13日
    浏览(34)
  • Python多线程编程全解析:基础到高级用法

      Python中有多线程的支持。Python的 threading 模块提供了多线程编程的基本工具。在下面,我将列举一些基础的多线程用法和一些高级用法,并提供相应的源代码,其中包含中文注释。 这些例子涵盖了一些基础和高级的多线程用法。请注意,在Python中由于全局解释器锁(GIL)的

    2024年02月03日
    浏览(49)
  • Python 的 argparse 模块的作用,以及分享一个通用代码模板

    🍉 CSDN 叶庭云 : https://yetingyun.blog.csdn.net/ argparse 是 Python 内置的一个用于命令项选项与参数解析的模块。它的作用是帮助我们处理命令行输入,轻松编写用户友好的命令行接口。 命令行接口的需求 : 假设您编写了一个 Python 脚本,您希望用户能够在运行脚本时提供一些选项

    2024年02月22日
    浏览(46)
  • python中argparse模块关于 parse_args() 函数详解(全)

    原理:命令行解析使用argparse包 作用:命令行传参赋值 可用在机器学习深度学习 或者 脚本运行等 了解这个函数需要了解其背后的原理以及具体参数 在深度学习模型框架中几乎都有的模块 浓缩后的示例代码: 主要的对象值赋参,对应的参数具体如下: 主要有两种情况: 位

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包