| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python argparse 库 -> 正文阅读 |
|
[Python知识库]python argparse 库 |
|
参数 | 说明 |
---|---|
prog | 程序的名称 (默认值: os.path.basename(sys.argv[0]) ) |
usage | 描述程序用途的字符串(默认值:从添加到解析器的参数生成) |
description | 在参数帮助文档之前显示的文本(默认值:无),可以用来说明程序的作用 |
epilog | 在参数帮助文档之后显示的文本(默认值:无),同上 |
parents | 一个 ArgumentParser 对象的列表,它们的参数也应包含在内 |
formatter_class | 用于自定义帮助文档输出格式的类 |
prefix_chars | 可选参数的前缀字符集合(默认值: ‘-’) |
fromfile_prefix_chars | 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None ) |
argument_default | 参数的全局默认值(默认值: None ) |
conflict_handler | 解决冲突选项的策略(通常是不必要的) |
add_help | 为解析器添加一个 -h/--help 选项(默认值: True ) |
allow_abbrev | 如果缩写是无歧义的,则允许缩写长选项 (默认值:True ) |
exit_on_error | 决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: True ) |
在 3.5 版更改: 增加了 allow_abbrev 参数。
在 3.8 版更改: 在之前的版本中,allow_abbrev 还会禁用短旗标分组,例如 -vv
表示为 -v -v
。
在 3.9 版更改: 添加了 exit_on_error 形参。
上面的参数我们不用全部记住,只需要记住几个常用的参数就行了,我们来优化一下我们示例的代码:
我们使用 description
参数添加一个程序说明:
import argparse
parse = argparse.ArgumentParser(description="用来进行加减乘除的运算")
定义单个的命令行参数应当如何解析。每个形参都在下面有它自己更多的描述,长话短说有:
参数 | 说明 |
---|---|
name or flags | 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo |
action | 当参数在命令行中出现时使用的动作基本类型 |
nargs | 命令行参数应当消耗的数目 |
const | 被一些 action 和 nargs 选择所需求的常数 |
default | 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的默认值 |
type | 命令行参数应当被转换成的类型 |
choices | 可用的参数的容器 |
required | 此命令行选项是否可省略 (仅选项可用) |
help | 一个此选项作用的简单描述 |
metavar | 在使用方法消息中使用的参数值示例 |
dest | 被添加到 parse_args() 所返回对象上的属性名 |
同样的我们不需要全部都记住,我们只需要记住几个常用的参数即可,其中值得注意的是以下两个参数的使用:
action:action
命名参数指定了这个命令行参数应当如何处理,以下介绍几个常用的参数。
store_true
and store_false
:用来表示bool
值,值得注意的是它们的默认值分别为 False
和 True
。
append
:存储一个列表,并且将每个参数值追加到列表中
extend
:这会存储一个列表,并将每个参数值加入到列表中,值得注意的是 一定要配合 nargs="+"
使用。
nargs:nargs
命名参数关联不同数目的命令行参数到单一动作。
*nargs='?'
:的一个更普遍用法是允许可选的输入或输出文件:
'*'
:所有当前命令行参数被聚集到一个列表中。
'+'
:和 '*'
类似,所有当前命令行参数被聚集到一个列表中。
我们使用 add_argument()
方法添加两个命令行参数丰富我们之前的代码:
import argparse
parse = argparse.ArgumentParser(description="用来进行加减乘除的运算")
parse.add_argument(name="-sum", action="extend", nargs="+", help="输入两个数字进行加法运算")
parse.add_argument(name="-sub", action="extend", nargs="+", help="输入两个数字进行减法运算")
将参数字符串转换为对象并将其设为命名空间的属性。 返回带有成员的命名空间。
对于这个方法,没有什么补充的,使用方法也很简单,如下:
import argparse
parse = argparse.ArgumentParser(description="用来进行加减乘除的运算")
parse.add_argument(name="-sum", action="extend", nargs="+", help="输入两个数字进行加法运算")
parse.add_argument(name="-sub", action="extend", nargs="+", help="输入两个数字进行减法运算")
#
args = parser.parse_args()
import argparse
parse = argparse.ArgumentParser(description="用来进行加减乘除的运算")
parse.add_argument(name="-sum", action="extend", nargs="+", help="输入两个数字进行加法运算")
parse.add_argument(name="-sub", action="extend", nargs="+", help="输入两个数字进行减法运算")
args = parser.parse_args()
# 直接使用 aegs.参数名就可以调用输入的值
a = args.sum
# 如果存在输入多个值,可以使用 aegs.参数名[1] 的方式获得我们需要的值
b = args.sum[0]
c = args.sum[1]
现在我们来完成我们上面的一个简单代码,实现两位数的加减乘除:
import argparse
# 加法
def sum(a, b):
return a + b
# 减法
def sub(a, b):
return a - b
# 乘法
def chenfa(a, b):
return a * b
# 除法
def chufa(a, b):
return a / b
if __name__ == '__main__':
# 创建一个解析器
parse = argparse.ArgumentParser(description="一个简单的加减乘除的运算程序!")
# 添加参数
parse.add_argument("-sum", type=int, action="extend", nargs="+", help="输入要进行加法的数字", )
parse.add_argument("-sub", type=int, action="extend", nargs="+", help="输入要进行减法的数字")
parse.add_argument("-chenfa", type=int, action="extend", nargs="+", help="输入要进行乘法的数字")
parse.add_argument("-chufa", type=int, action="extend", nargs="+", help="输入要进行除法的数字")
# 解析参数
args = parse.parse_args()
# 判断使用了哪些算法
if args.sum != None:
print(f"{args.sum[0]} + {args.sum[1]} = {sum(args.sum[0], args.sum[1])}")
elif args.sub != None:
print(f"{args.sub[0]} - {args.sub[1]} = {sum(args.sub[0], args.sub[1])}")
elif args.chenfa != None:
print(f"{args.chenfa[0]} * {args.chenfa[1]} = {sum(args.chenfa[0], args.chenfa[1])}")
elif args.chufa != None:
print(f"{args.chufa[0]} / {args.chufa[1]} = {sum(args.chufa[0], args.chufa[1])}")
else:
print("请输入正确的参数和参数值进行运算!")
其中值得注意的是如果没有在命令行中调用参数,如 args.sum
的返回结果是 None
。
这个库还有很多的内容是我没有讲到的,我只是讲了一下简单的运用。如果有需要或者兴趣可以去官方文档中查看相应的应用。
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/26 13:30:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |