前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >人生要找对路,代码要找对路口 | argparse实例详解

人生要找对路,代码要找对路口 | argparse实例详解

作者头像
AI算法与图像处理
发布于 2019-05-22 12:12:06
发布于 2019-05-22 12:12:06
61900
代码可运行
举报
运行总次数:0
代码可运行

导读

刚开始在GitHub找别人源码的时候,经常遇到一个开源项目有好多star,但却不知道怎么用,因为我不懂入口在哪,现在不一样了,我膨胀了。。。不,我学会了这个,而且还发现了一个超叼的东西,准备下周整理一下发出来,超叼的分类器集合,我调试好之后会说明如何使用,敬请期待哈哈哈~~~~

进入正题

什么是argsparse

argsparse是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。

如何传入参数

我们先在桌面新建“arg学习”的文件夹,在该文件夹中新建demo.py文件,来看一个最简单的argsparse库的使用的例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
#type是要传入的参数的数据类型  help是该参数的提示信息
parser.add_argument('integers', type=str, help='传入的数字')

args = parser.parse_args()

#获得传入的参数
print(args)

在这个代码中,我们在命令行传入一个数字。使用方法是打开命令行,先将工作目录cd到 arg学习

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd desktop/arg学习

然后再命令行中输入 python demo.py-h 或者 python demo.py--help , 这里我输入的是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python demo.py -h

在命令行中看到demo.py的运行结果如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
usage: demo.py [-h] integers

命令行中传入数字

positional arguments:
  integers    传入的数字

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

现在我们在命令行中给demo.py 传入一个参数5,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python demo.py 5

运行,得到的运行结果是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Namespace(integers='5')

操作args字典

其实得到的这个结果 Namespace(integers='5')是一种类似于python字典的数据类型。

我们可以使用 arg.参数名来提取这个参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
#type是要传入的参数的数据类型  help是该参数的提示信息
parser.add_argument('integers', type=str, help='传入的数字')

args = parser.parse_args()

#获得integers参数
print(args.integers)

在命令行中运行 python demo.py5 , 运行结果为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
5

传入多个参数

现在在命令行中给demo.py 传入多个参数,例如传入1,2,3,4四个数字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python demo.py 1 2 3 4

运行报错

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
usage: demo.py [-h] integers
demo.py: error: unrecognized arguments: 2 3 4

不能识别2 3 4,看源代码我们知道integers这个参数是位置参数,说明第一个数 1 是能识别。这里我们需要重新更改demo.py代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers', type=str, nargs='+',help='传入的数字')
args = parser.parse_args()

print(args.integers)

nargs是用来说明传入的参数个数,'+' 表示传入至少一个参数。这时候再重新在命令行中运行 python demo.py1234 得到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['1', '2', '3', '4']

改变数据类型

add_argument中有type参数可以设置传入参数的数据类型。我们看到代码中有type这个关键词,该关键词可以传入list, str, tuple, set, dict等。例如我们把上面的type=str,改成type=int,这时候我们就可以进行四则运算。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import argparse

parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers', type=int, nargs='+',help='传入的数字')
args = parser.parse_args()

#对传入的数据进行加总
print(sum(args.integers)

在命令行中输入 python demo.py1234, 运行结果为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
10

位置参数

在命令行中传入参数时候,传入的参数的先后顺序不同,运行结果往往会不同,这是因为采用了位置参数,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import argparse

parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('param1', type=str,help='姓')
parser.add_argument('param2', type=str,help='名')
args = parser.parse_args()

#打印姓名
print(args.param1+args.param2)

在命令行中分别输入 python demo.py张三python demo.py三张,得到的 运行结果分别为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
张三

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
三张

如果我们将代码 parser.add_argument('param1',type=str,help='姓')

parser.add_argument('param2',type=str,help='名') 互换位置,即第4行和第五行代码,再重新运行

python demo.py张三python demo.py三张,得到的 运行结果分别为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
三张

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
张三

*** 可选参数(重点——因为经常会用到)

为了在命令行中避免上述位置参数的bug(容易忘了顺序),可以使用可选参数,这个有点像关键词传参,但是需要在关键词前面加 --,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import argparse

parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str,help='姓')
parser.add_argument('--name', type=str,help='名')
args = parser.parse_args()

#打印姓名
print(args.family+args.name)

在命令行中输入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python demo.py --family=--name=三
# 或者输入 python demo.py --family 张 --name 三

运行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
张三

可选参数虽然写法比较繁琐,但是增加了命令行中的可读性,不容易因为参数传入顺序导致数据错乱。

默认值

add_argument中有一个default参数。有的时候需要对某个参数设置默认值,即如果命令行中没有传入该参数的值,程序使用默认值。如果命令行传入该参数,则程序使用传入的值。具体请看下面的例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import argparse

parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, default='张',help='姓')
parser.add_argument('--name', type=str, default='三', help='名')
args = parser.parse_args()

#打印姓名
print(args.family+args.name)

在命令行中分别输入 python demo.pypython demo.py--family=李

运行结果分别为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
张三

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
李三

必需参数

add_argument有一个required参数可以设置该参数是否必需。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import argparse

parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, help='姓')
parser.add_argument('--name', type=str, required=True, default='', help='名')
args = parser.parse_args()

#打印姓名
print(args.family+args.name)

在命令行中输入 python demo.py--family=张,运行结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
usage: demo.py [-h] [--family FAMILY] --name NAME
demo.py: error: the following arguments are required: --name

因为可选参数 name的required=True,所以必须要传入。如果我们将其更改为False,程序运行结果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI算法与图像处理 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 模块:argparse
argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
不可言诉的深渊
2019/07/26
2.6K0
python中argparse 命令行参数解析包
argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数,当你的代码需要频繁地修改参数的时候,使用这个工具可以将参数和代码分离开来,让你的代码更简洁,适用范围更广
Python学习者
2023/03/30
8130
python自学argparse模块
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块
py3study
2020/01/07
1.5K0
python的argparse模块
argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数,当你的代码需要频繁地修改参数的时候,使用这个工具可以将参数和代码分离开来,让你的代码更简洁,适用范围更广。 argparse使用比较简单,常用的功能可能较快地实现出来,下面我分几个步骤,以Python3为例,逐渐递增地讲述argparse的用法。
狼啸风云
2019/08/29
1.3K0
【转】Python 模块简介 -- argparse
argparse 是 Python 标准库中用来解析命令行参数和选项的模块,其是为替代已经过时的 optparse 模块而生的,该模块在 Python2.7 中被引入。argparse模块的作用是用于解析命令行参数。
marsggbo
2020/03/17
2.6K1
python中的argparse
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数。 最基础的,从一个最简单的程序开始: import argparse parser = argparse.ArgumentParser() 运行结果: $ python 1.py $ 定位参数: import argparse parser=argparse.ArgumentParser() parser.add_argument("echo") p
233333
2018/03/07
1K0
python3中argparse模块
如:[root@openstack_1 /]# ls root/ #其中root/是位置参数
狼啸风云
2019/05/26
7420
python-argparse模块
我们通过控制台 输入 python3 argsparser_demo.py --help,我们可以看到相关说明
搁浅同学
2022/07/21
3290
python-argparse模块
Pytorch学习-如何接受命令行参数argparse模块
使用argparse 模块定义解析命令行参数,命令 行参数其实也是应用在程序中的参数,只是为了更方便他人使用程序而设置。
AI深度学习求索
2018/12/11
5.1K0
python学习之argparse模块
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。
py3study
2020/01/09
1.9K0
python:argparse用于命令行参数解析
argparse是python中内置的命令行解析模块,内置于python,导入即可使用。
生信菜鸟团
2021/12/15
2.7K0
Python argparse 模块
这篇文章主要是对 argparse(Python标准库中推荐的命令行解析模块) 进行简要介绍。原英文链接如下:
用户7685359
2020/08/21
1.1K0
Python 命令行之旅:深入 argparse(二)
在上一篇“深入 argparse (一)”的文章中,我们深入了解了 argparse 的包括参数动作和参数类别在内的基本功能,具备了编写一个简单命令行程序的能力。本文将继续深入了解 argparse 的进阶玩法,一窥探其全貌,助力我们拥有实现复杂命令行程序的能力。
Python猫
2019/10/15
1.4K0
Python argparse标准库快速入门
Python是一门非常好用的脚本语言,自然使用它来开发命令行程序也比较方便。而且Python的标准库中有一个名为argparse的库,可以非常方便的让我们把命令行参数转换成所需的数据格式。下面就让我们来看看如何使用argparse标准库吧。
乐百川
2020/02/18
9430
《Python实例》基础之argparse,提供一个友好的接口说明,老大说我做的真好
python经常是作为脚本在使用,在大部分的时候我们写的脚本都要给其他人使用,参数的调用常规的情况下需要提供说明文档,说明每个参数是怎么使用的,但是如果是给同组内的程序同学使用,大都不愿意写文档,对于我们程序同学来说写代码更简单,再说源码都给你了要什么文档。
香菜聊游戏
2021/08/10
6850
《Python实例》基础之argparse,提供一个友好的接口说明,老大说我做的真好
python包合集-argparse
  argparse 是 python 自带的命令行参数解析包,可以用来方便的服务命令行参数,使用之前需要先导入包 import argparse
Se7eN_HOU
2022/09/28
4060
python包合集-argparse
Python 中argparse模块的使用
如果脚本很简单或临时使用,没有多个复杂的参数选项,可以直接利用sys.argv将脚本后的参数依次读取(读进来的默认是字符串格式)。
用户1332428
2018/07/30
8280
Python中的参数传递与解析
Python传递命令行参数 Python的命令行参数传递和C语言类似,都会把命令行参数保存到argv的变量中。对于python而言,argv是sys模块中定义的一个list。与C语言不同的是,python中并没有定义argc,要获得参数的个数,需要使用len(sys.argv) 当用户使用'python -c "command" '来运行一条python语句时,argv中保存的是['-c']及"command"后面的参数,例如: $ python -c 'import sys print sys.argv'
宅蓝三木
2018/02/07
2.2K0
Python3 命令行参数解析
在模型训练程序中,我们经常要配置命令参数,这里可用到 argparse 模块,它是 Python 内置的一个用于命令选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息。 使用 argparse 模块解析命令行参数,主要分三个步骤:创建解析器、添加参数、解析参数,步骤如下:
嵌入式视觉
2022/09/05
1.3K0
Python | 使用argparse解析命令行参数
今天是Python专题第27篇文章,我们来聊聊Python当中的命令行参数工具argparse。
TechFlow-承志
2020/08/17
2K0
相关推荐
Python 模块:argparse
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验