python argparse模块传参用法实例
作者:HiDaDeng 发布时间:2022-01-19 09:53:42
前言
argsparse是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。
港真的,今天是我第一次学习argsparse。因为用不到,自然也就没有学习的动力。但是现在电脑有点卡,每次打开pycharm太卡了,逼得我不得不开始使用命令行来测试代码。
传入一个参数
我们先在桌面新建“arg学习”的文件夹,在该文件夹中新建demo.py文件,来看一个最简单的argsparse库的使用的例子。
import argparse
parser = argparse.ArgumentParser(description='命令行中传入一个数字')
#type是要传入的参数的数据类型 help是该参数的提示信息
parser.add_argument('integers', type=str, help='传入的数字')
args = parser.parse_args()
#获得传入的参数
print(args)
在这个代码中,我们在命令行传入一个数字。使用方法是打开命令行,先将工作目录cd到arg学习
cd desktop/arg学习
然后再命令行中输入python demo.py -h或者python demo.py --help, 这里我输入的是
python demo.py -h
在命令行中看到demo.py的运行结果如下
usage: demo.py [-h] integers
命令行中传入数字
positional arguments:
integers 传入的数字
optional arguments:
-h, --help show this help message and exit
现在我们在命令行中给demo.py 传入一个参数5,
python demo.py 5
运行,得到的运行结果是
Namespace(integers='5')
操作args字典
其实得到的这个结果Namespace(integers='5')是一种类似于python字典的数据类型。
我们可以使用 arg.参数名来提取这个参数
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.py 5 , 运行结果为
5
传入多个参数
现在在命令行中给demo.py 传入多个参数,例如传入1,2,3,4四个数字
python demo.py 1 2 3 4
运行报错
usage: demo.py [-h] integers
demo.py: error: unrecognized arguments: 2 3 4
不能识别2 3 4,看源代码我们知道integers这个参数是位置参数,说明第一个数1是能识别。这里我们需要重新更改demo.py代码
import argparse
parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers', type=str, nargs='+',help='传入的数字')
args = parser.parse_args()
print(args.integers)
nargs是用来说明传入的参数个数,'+' 表示传入至少一个参数。这时候再重新在命令行中运行python demo.py 1 2 3 4得到
['1', '2', '3', '4']
改变数据类型
add_argument中有type参数可以设置传入参数的数据类型。我们看到代码中有type这个关键词,该关键词可以传入list, str, tuple, set, dict等。例如我们把上面的type=str,改成type=int,这时候我们就可以进行四则运算。
import argparse
parser = argparse.ArgumentParser(description='命令行中传入一个数字')
parser.add_argument('integers', type=int, nargs='+',help='传入的数字')
args = parser.parse_args()
#对传入的数据进行加总
print(sum(args.integers)
在命令行中输入 python demo.py 1 2 3 4, 运行结果为
10
位置参数
在命令行中传入参数时候,传入的参数的先后顺序不同,运行结果往往会不同,这是因为采用了位置参数,例如
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 三 张,得到的 运行结果分别为
张三
和
三张
如果我们将代码
parser.add_argument('param1', type=str,help='姓')
和
parser.add_argument('param2', type=str,help='名')互
换位置,即第4行和第五行代码,再重新运行
python demo.py 张 三 和 python demo.py 三 张,得到的 运行结果分别为
三张
和
张三
可选参数
为了在命令行中避免上述位置参数的bug(容易忘了顺序),可以使用可选参数,这个有点像关键词传参,但是需要在关键词前面加--,例如
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)
在命令行中输入
python demo.py --family=张 --name=三
运行结果
张三
可选参数虽然写法比较繁琐,但是增加了命令行中的可读性,不容易因为参数传入顺序导致数据错乱。
默认值
add_argument中有一个default参数。有的时候需要对某个参数设置默认值,即如果命令行中没有传入该参数的值,程序使用默认值。如果命令行传入该参数,则程序使用传入的值。具体请看下面的例子
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.py 、 python demo.py --family=李
运行结果分别为
张三
和
李三
必需参数
add_argument有一个required参数可以设置该参数是否必需。
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=张,运行结果
usage: demo.py [-h] [--family FAMILY] --name NAME
demo.py: error: the following arguments are required: --name
因为可选参数name的required=True,所以必须要传入。如果我们将其更改为False,程序运行结果
张
来源:https://zhuanlan.zhihu.com/p/56922793
猜你喜欢
- modelform是model衍生出来的form .modelform的用法非常死.首先在models.py里创建模型表.所有的form组件
- 准备必须环境:Python3开始先实现一个简单的版本,直接上代码:import urllib.requestimport urllib.er
- 自定义比较排序/运算符Python3和Python2相比有挺多变化。在Python2中可以直接写一个cmp函数作为参数传入sort来自定义排
- php中session_id()函数原型及说明session_id()函数说明:stringsession_id([string$id])s
- 一、本文使用的第三方包和工具python 3.8 谷歌浏览器selenium(3.141.0)(pip install
- 前言几乎每个程序都需要用到图片。下面就来给大家介绍前端+PHP后端实现微信小程序实现图片上传功能,分享出来供大家参考学习,下面话不多说了,来
- 本文代码将一些简单常用的SQL语句,拆分、封装成链式函数与终结函数,链式操作没有先后之分,实现傻瓜式mysql数据库操作。 同时学习下静态成
- 目录一、两个模块二、SMTP端口三、四大步骤1、构造邮件内容2、连接邮件服务器3、登陆邮件服务器4、发送邮件四、常用场景1、纯文本邮件2、发
- 1、文件上传(input标签) (1)html代码(form表单用post方法提交)<input class="b
- 实例如下所示:>>>from compiler.ast import flatten>>>Xmatrix
- 前言保留小数位是我们经常会碰到的问题,尤其是刷题过程中。那么在python中保留小数位的方法也非常多,但是笔者的原则就是什么简单用什么,因此
- 什么是面向对象编程(类)利用(面向)对象的(属性和方法)去进行编码的过程即面向对象编程自定义对象数据类型就是面向对象中的类(class)的概
- 本文实例讲述了php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法。分享给大家供大家参考,具体如下:微信支付a
- 概要本文分步介绍了如何在运行 SQL Server 的计算机之间移动 Microsoft SQL Server 用户数据库和大多数常见的 S
- goto语句在Go编程语言中的goto语句提供无条件跳转从跳转到标记声明的功能。注意:使用goto语句是高度劝阻的在任何编程语言,因为它使得
- 在静态页面里需要显示浏览次数的地方加上这个:浏览次数:<SCRIPT language='javascript
- 前言:python 中协程概念是从 3.4 版本增加的,但 3.4 版本采用是生成器实现,为了将协程和生成器的使用场景进行区分,使语义更加明
- 前言Pandas是为一次性处理整个行或列的矢量化操作而设计的,循环遍历每个单元格、行或列并不是它的设计用途。所以,在使用Pandas时,你应
- 什么是掩膜(mask)在numpy中,有一个模块叫做ma,这个模块几乎复制了numpy里面的所有函数,当然底层里面都换成了对自己定义的新的数
- 不知上过ChinaRen校友录的朋友们有没有注意,ChinaRen在改版后很多方面都进行了较大的改动。例如留言与回复方面已经不再像以前那样,