python argparse模块详解(python3 argparse)

python argparse模块详解(python3 argparse)nbsp 是 Python 的一个标准库 用于命令行参数的解析 argparse 模块可以让人轻松编写用户友好的命令行接口 这意味着我们无需在代码中手动为变量赋值 而是可以直接在命令行中向程序传递相应的参数 再由变量去读取这些参数 argparse 模块还会自动生成帮助和使用手册 并在用户给程序传入无效参数时报出错误信息 如果没有安装 nbsp 可执行如下命令进行安装 使用时只需导入 我们先来看一个最简单的例子 了解了使用 nbsp nbsp 的大致步骤后 再来详细介绍各个 API



是 Python 的一个标准库,用于命令行参数的解析,argparse 模块可以让人轻松编写用户友好的命令行接口,这意味着我们无需在代码中手动为变量赋值,而是可以直接在命令行中向程序传递相应的参数,再由变量去读取这些参数。

argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

如果没有安装 ,可执行如下命令进行安装

使用时只需导入

我们先来看一个最简单的例子,了解了使用  的大致步骤后,再来详细介绍各个API。

将以上内容保存到  中。我们先在命令行执行

可以看到相应的帮助信息

从  可以看出  接收两个必选项: 和 (带有  的为可选项,没带的为必选项),它们分别代表第一个数和第二个数,其中  和  分别代表实际传入的参数。

在命令行中执行

返回结果是 ,这说明我们通过命令行完成了求解两数之和这个操作。

使用  的第一步是先创建一个  对象,该对象包含将命令行解析成 Python 数据类型所需的全部信息,其常用参数如下

默认值为 ,也就是程序所在文件的名称。

例如在第一章节中,我们在创建  对象时没有指定 ,因此采用了默认值 。

先来看一个例子

输出的帮助信息:

可以看到若不指定 ,则帮助信息将显示  作为程序名称。现在指定

相应的帮助信息:

可以看到原先  的地方变成了 。

默认情况下, 根据它包含的选项来构建用法消息。

这里依然使用第一章节的例子:

因为我们没有指定 ,所以  将使用它包含的三个选项:、、 来构建用法消息 ,它位于帮助信息的第一行。

如果觉得默认的  有些冗余(因为下方的  已经详细介绍了各个选项),我们可以自定义

相应的帮助信息变成

需要注意的是,在指定了  后, 将会被覆盖,即使在  中指定了  也没有用。

参数用来简要描述这个程序做什么以及怎么做。不指定  时,帮助信息中将不予显示。

依然使用第一章节的例子,这里我们指定

相应的帮助信息

可以看到  和  中间多了一行内容,这就是我们指定的 。

该参数和  类似,区别在于, 放在了  之前,而  放在了  之后。

依然使用第一章节的例子,这里我们同时指定  和

相应的帮助信息

通常来讲,以上四个参数中用的最多的是

方法用于向解析器中添加一个选项(位置参数)。

以上仅列出了  方法中最常用的几个参数。

为选项()或位置参数()。

如果是选项的话可以传入一系列flags(例如自带的帮助就有两个:、),如果是位置参数的话则只能传入一个 。

例如

相应的帮助信息:

这意味着我们在命令行调用  和  是等价的。

与选项不同的是,位置参数前不能加 ,并且每次只能传入一个,例如

相应的帮助信息:

从  可以看出位置参数在调用命令行时是必须传入的。

以上是先添加位置参数  再添加  的,如果我们调换顺序,则帮助信息中的两个参数的位置也将调换,这也诠释了 “位置” 的含义。

可以看出,选项和位置参数,前者相当于关键字传参,后者相当于位置传参。

顾名思义, 指选项或位置参数将要被转换成的数据类型(在命令行中传入的参数都默认以  类型存在)。

例如

执行  后得到结果

<class 'str'> <class 'int'>

指选项或位置参数的默认值,例如

直接执行  将会输出 ,因为采用了默认值。

如果执行  则会输出 ( 是任何整数,且不能省略)。

如果没有为  指定默认值,且在命令行执行时也没有向  传参,则  为 。

因为位置参数在命令行中是必须传入的,所以  只能用于选项。

设为  则代表此选项为必选项,否则为可选项,默认为 。

例如

此时帮助信息为

一行中  被一对方括号  括了起来,说明  是可选项。现在指定

这时候帮助信息变为

可以看到  消失了,说明  变成了必选项。

用来描述一个选项或位置参数,该描述将会显示在帮助信息中

相应的帮助信息

假如选项  需要接收5个参数,此时需要用  来指定

执行

可以得到

[1, 2, 3, 4, 5]

需要注意, 最终会得到一个只含一个元素的列表,而非元素本身。

更进一步, 代表传入参数的数量为0个或1个, 代表传入参数的数量至少1个, 代表可传入任意多的参数。

有些时候,选项  的取值只能是固定的几种,例如  只能从整数1,3,5中选取,这时候需要用  来指定一个列表

相应的帮助信息

如果  后面跟的数字不是1,3,5中的一个就会报错。

我们先来看一个例子。

在命令行执行  得到结果

['demo.py', '--a', '3', '--b', '5']

从中可以看出, 是文件名, 是我们在命令行中传入的选项。

在之前的学习过程中,可能你已经注意到了,每次我们为解析器添加完相应的选项/位置参数后,都要执行一遍 。

默认情况下, 采用  作为其参数,并返回一个命名空间(类似于字典)。

举个例子

执行  得到

<class 'argparse.Namespace'>
Namespace(a=[1, 3, 5], b='k', c=3.14)

如果只执行 ,则得到

<class 'argparse.Namespace'>
Namespace(a=[1, 3, 5], b='k', c=None)

可以看出,如果在命令行中没有提供相应的选项,并且该选项也没有默认值,则在命名空间中该选项的值为 ,这一点我们早在 3.2 节中就已经提到了。

返回的是一个命名空间对象,我们通常用  来存储。

要访问  中键  对应的值 ,只需要  即可。

在执行  这一步中,可能会出现报错情况,例如

如果我们在命令行执行  就会报错,这是因为字符串无法转换成整数。

一般我们会采用如下代码块来避免直接看到不友好的报错

深度学习经常需要调参,如果直接使用IDE打开  文件去调未免显得有些笨拙,而且也会变得不好维护。

如果使用 ,虽然不用每次修改  文件,但在命令行里反复修改也略显麻烦,这时候就需要将其与shell脚本进行结合了。

为简便起见,假设我们的项目架构如下:

myproject
├── __init__.py
├── model
│ ├── model1.py
│ ├── model2.py
│ └── model3.py
├── scripts
│ └── train.sh
├── train.py
└── utils
├── utils1.py
└── utils2.py

其中  中的内容为

这时候我们只需要在脚本目录  下新建一个文件 ,向其中写入内容

然后在命令行执行(假设当前处于  目录下)

编程小号
上一篇 2025-02-24 13:06
下一篇 2025-03-18 22:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/74109.html