python中argparse模块关于 parse_args() 函数详解(全)

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

前言

  • 原理:命令行解析使用argparse包
  • 作用:命令行传参赋值 可用在机器学习深度学习 或者 脚本运行等

了解这个函数需要了解其背后的原理以及具体参数

1. 函数讲解

在深度学习模型框架中几乎都有的模块
浓缩后的示例代码:

# 导入模块包
import argparse

# 解析对象ArgumentParser,description程序描述
parser=argparse.ArgumentParser(description=" parse_args() 函数讲解")

# 对象值赋参(可选 或者 必选),指定该程序需要接受的命令参数
parser.add_argument('--weights', default=ROOT / 'yolov5s.pt', help='model path or triton URL')

# 增加后的属性赋值给args
args=parser.parse_args()

主要的对象值赋参,对应的参数具体如下:
parse_args,python,python,人工智能
主要有两种情况:

  • 位置参赋值:parser.add_argument("a",help="输出a值")
    执行位置参的赋值,对应命令行输入为:python detect.py 1,最后输出args.a = 1
  • 可选赋值:parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'yolov5s.pt', help='model path or triton URL')
    可选参数可选可不选
参数 大致情况
action 程序运行前的操作。结合可选参数bool(python detect.py --bool,默认action为store_true,则将其bool设置为1 )
nargs 接受的参数个数
count 参数出现的次数。结合action,比如 action="count"
desault 参数默认值
type 默认值为str,不是str值会被过滤。需要int类型,只需设置type = int
choices 参数可选值,比如choices=[0, 1, 2]
required 指定参数需要用到该值,比如required=True)
help 参数介绍
metavar 配合help将其信息输出
dest 关联值,若dest=“a”,那么可以通过args.a访问该参数
version 程序版本信息

其源函数的逻辑代码如下(在argparse模块中,仅展示大致逻辑):
关于函数中涉及的*args, **kwargs,可看我这篇文章:Python关于 *args 和 **kwargs 参数的详解(全)

    # =======================
    # Adding argument actions
    # =======================
    def add_argument(self, *args, **kwargs):
        """
        add_argument(dest, ..., name=value, ...)
        add_argument(option_string, option_string, ..., name=value, ...)
        """

        # 如果没有提供位置参数,或者只提供了一个,而且它看起来不像选项字符串,解析一个位置参数
        chars = self.prefix_chars
        if not args or len(args) == 1 and args[0][0] not in chars:
            if args and 'dest' in kwargs:
                raise ValueError('dest supplied twice for positional argument')
            kwargs = self._get_positional_kwargs(*args, **kwargs)

        # 否则,我们将添加一个可选参数
        else:
            kwargs = self._get_optional_kwargs(*args, **kwargs)

        # 如果没有提供默认值,则使用解析器级别的默认值
        if 'default' not in kwargs:
            dest = kwargs['dest']
            if dest in self._defaults:
                kwargs['default'] = self._defaults[dest]
            elif self.argument_default is not None:
                kwargs['default'] = self.argument_default

        # 创建操作对象,并将其添加到解析器中
        action_class = self._pop_action_class(kwargs)
        if not callable(action_class):
            raise ValueError('unknown action "%s"' % (action_class,))
        action = action_class(**kwargs)

        # 如果操作类型不可调用,则引发错误
        type_func = self._registry_get('type', action.type, action.type)
        if not callable(type_func):
            raise ValueError('%r is not callable' % (type_func,))

        if type_func is FileType:
            raise ValueError('%r is a FileType class object, instance of it'
                             ' must be passed' % (type_func,))

        # 如果元数据与类型不匹配,则引发错误
        if hasattr(self, "_get_formatter"):
            try:
                self._get_formatter()._format_args(action, None)
            except TypeError:
                raise ValueError("length of metavar tuple does not match nargs")

        return self._add_action(action)

	# =======================
    # 对应函数代码调用
    # =======================

    def add_argument_group(self, *args, **kwargs):
        group = _ArgumentGroup(self, *args, **kwargs)
        self._action_groups.append(group)
        return group

    def add_mutually_exclusive_group(self, **kwargs):
	## 省略

	# =======================
    # 对应参数的赋值 初始化等
    # =======================
    
class _ArgumentGroup(_ActionsContainer):

    def __init__(self, container, title=None, description=None, **kwargs):
        # 通过检查容器添加任何缺少的关键字参数
        update = kwargs.setdefault
        update('conflict_handler', container.conflict_handler)
        update('prefix_chars', container.prefix_chars)
        update('argument_default', container.argument_default)
        super_init = super(_ArgumentGroup, self).__init__
        super_init(description=description, **kwargs)

        # 属性
        self.title = title
        self._group_actions = []

        # 与容器共享大部分属性
        self._registries = container._registries
        self._actions = container._actions
        self._option_string_actions = container._option_string_actions
        self._defaults = container._defaults
        self._has_negative_number_optionals = \

2. 基本用法

  • 执行脚本,输出想要的值:python test1.py 2,最后输出值为4
import argparse
parser = argparse.ArgumentParser(description=" 输出平方数")
parser.add_argument("square",type=int)
args = parser.parse_args()
# 输出args.square的值为4
print args.square**2
  • 执行位置参数(将值赋值给参数):python test1.py 2,最后输出2
import argparse
parser = argparse.ArgumentParser(description=" 输出a值")
parser.add_argument("a")
args = parser.parse_args()
# 输出a的值2
print args.a

3. 实战讲解

以下运行的是yolov5的代码逻辑:

整体的主函数为:

if __name__ == "__main__":
	# 解析命令行格式下的参数
    opt = parse_opt()
    # 调用主函数
    main(opt)

对应命令行格式下的参数可以为图片或者视频流:python detect.py --source data/images/bus.jpg,代码运行截图如下:
parse_args,python,python,人工智能

具体解析参数的函数如下:

def parse_opt():
   # 传入的参数,以上的参数为命令行赋值的参数,如果没有给定该参数值,会有一个default的默认值进行赋值
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'yolov5s.pt', help='model path or triton URL')
    parser.add_argument('--source', type=str, default=ROOT / 'data/images', help='file/dir/URL/glob/screen/0(webcam)')
    parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='(optional) dataset.yaml path')
    parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w')
	
	# 省略的参数(由于参数比较多,此处就不放入
	
    opt = parser.parse_args()
    
    # 此处对传入的size加以判断。如果不传入,默认为640,则长度为1,则对应size 为640 * 640。如果传入的参数为640 * 640 ,则不修改
    opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1  # expand
    # 将其所有的参数信息进行打印
    print_args(vars(opt)
    # 将其opt的参数返回,后续调用main函数需要调用该参数
    return opt

具体main函数的执行如下:文章来源地址https://www.toymoban.com/news/detail-602959.html

def main(opt):
	# 检查requirement的依赖包 有无成功安装,如果没有安装部分会在此处报错
    check_requirements(exclude=('tensorboard', 'thop'))
    # 如果成功安装,将其所有的参数代入,并执行此处的run函数
    run(**vars(opt))

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

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

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

相关文章

  • 【python】程序运行添加命令行参数argparse模块用法详解

     很多时候,我们的程序要带参数来运行不同的功能,需要解析命令行参数。argparse模块能够很好的提供支持。 argparse是 python 自带的命令行参数解析包,用于解析命令行参数的标准模块。可以让人轻松编写用户友好的命令行接口,还会自动生成帮助和使用手册,并在用户给程

    2024年02月04日
    浏览(38)
  • Python中的*args和**kwargs:无限可能的函数参数详解

      在 Python 编程中,*args 和 **kwargs 是常用的两个特殊参数,用于处理不确定数量的函数参数。它们提供了一种灵活的方式来传递和接收参数,使函数的定义更加通用。本文将详细介绍 *args 和 **kwargs 的使用方法,并提供相关代码示例。   args 是一个特殊的参数,在函数定义时

    2024年02月08日
    浏览(28)
  • 22 Python的argparse模块

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

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

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

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

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

    2024年02月22日
    浏览(39)
  • Python Numpy 关于 linspace()函数 使用详解(全)

    用plt画图的时候,偶尔会看到这个函数的出现,索性直接深入源码实战进行复现 主要功能 :在线性区域中生成等间距的序列,原先在Numpy中可以用 numpy.arange() ,但对于浮点数会有精度丢失,因此 linspace() 对于浮点数比较友好。适当的参数,两者都可选择。 具体源码: numpy

    2024年02月05日
    浏览(40)
  • 《Python入门到精通》time模块详解,Python time标准库,time库函数大全

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 小白零基础《Python入门到精通》

    2024年02月09日
    浏览(36)
  • 以optee的sign_encrypt.py为例讲解argparse命令解析模块

    Argparse是 Python 标准库中推荐的命令行解析模块。该模块会自动生成提示信息,且在用户给程序传入非法参数时报错。 刚好最近在看optee的sign_encrypt.py,以它为例介绍python的argparse命令解析模块。 脚本参见:optee_os/scripts/sign_encrypt.py at master · OP-TEE/optee_os · GitHub ArgumentParser 对象

    2024年02月10日
    浏览(35)
  • 解决pip安装python-jenkins模块报“Could not find suitable distribution for Requirement.parse(‘pbr‘)”的问题

    相关版本: python-jenkins依赖pbr,其实还依赖six pip版本太低了,需要升级匹配版本 这是因为升级版本跨度太大导致的失败 解决办法:手动安装 安装成功 python2.7 pip 升级报错 def read(rel_path: str) -> str:

    2024年02月11日
    浏览(40)
  • python中的argparse基本用法

    1、argparse是一个python模块,用途是:命令行选项、参数和子命令的解释。 2、使用步骤: 导入argparse模块,并创建解释器 添加所需参数 解析参数 3、用法示例: 4、命令行运行方式 假设上述文件的名字是gf.py 在命令行运行时,则有以下几种情况: python gf.py potato ,这种方式会

    2024年02月12日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包