参考官方文档https://docs.python.org/zh-cn/3/library/argparse.html#nargs
python中参数解释器,使用流程:
import argparse
parser = argparse.ArgumentParser() ## 新建参数解释器对象
parser.add_argument('-v') ## 添加参数
args = parser.parse_args(['-v', '3'])### 参数赋值,也可以通过终端赋值
'''
python test.py -v
'''
1. argparse.ArgumentParser()
class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True, exit_on_error=True)
参数很多,一般都选默认。有时会设置usage
–描述程序的用法.
2. parser.add_argument()
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
定义单个的命令行参数应当如何解析。每个形参都在下面有它自己更多的描述,长话短说有:
name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
action - 当参数在命令行中出现时使用的动作基本类型。
nargs - 命令行参数应当消耗的数目。
const - 被一些 action 和 nargs 选择所需求的常数。
default - 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。默认值
type - 命令行参数应当被转换成的类型。
choices - 可用的参数的容器。
required - 此命令行选项是否可省略 (仅选项可用)。
help - 一个此选项作用的简单描述。
metavar - 在使用方法消息中使用的参数值示例。
dest - 被添加到 parse_args() 所返回对象上的属性名。
2.1 name or flags
参数名称
参数可以是位置参数,也可以是可选参数。parser.add_argument()调用时,根据名称前有无中划线‘-’,确定参数是位置参数还是可选参数。
- 可选参数
parser.add_argument('-f', '--foo')
- 位置参数可以这么创建:
parser.add_argument('bar')
当 parse_args() 被调用,选项会以 - 前缀识别,剩下的参数则会被假定为位置参数。位置参数必须被赋值,可选参数可根据情况不赋值。
2.2 action
动作类型
可选值为: store
, store_const
,store_true
, store_false
store
默认值,设置的值都会保存store_const
存储被 const 命名参数指定的值
foo未设置值,但是在参数列表中加了--foo
,则foo=42
,如果调用的时候,不传参数列表,foo=None
。
这点与parser.add_argument('--foo', default=42)
不同,此时,传个空的参数列表 给foo
,foo
的值为42。
如果传参数却不赋值,会报错
store_true
和store_false
是store_const
的特殊值,分别作为存储True
和False
foo
的action=store_true
,传参列表中加了--foo
,则foo=True
bar
的action=store_false
,传参列表中加了--bar
,则bar=False
baz
的action=store_false
,传参列表中没加了--baz
,则bar
取与他存储值相反的值False
2.3 nargs
参数个数
N
- 表示前面的参数接收N个参数?
- 接收0或1个参数*
- 接收0或多个参数+
- 接收1或多个参数,未传参数时,报错
2.3.1 ?
配合default
和const
使用
nargs=?
的变量,赋值的参数可以有0或1个
2.3.1 *
2.4 type
类型
type 关键字允许执行任何必要的类型检查和类型转换
foo的类型是int,bar的类型是str.两个参数传的值相同,但因为type类型不同,收到的参数值的类型不同
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', type=int)
parser.add_argument('--bar', type=str)
args = parser.parse_args(['--foo','10','--bar','10'])
print(args)
>>>Namespace(bar='10', foo=10)
2.5 choice
从choice可取值的范围内设置一个值,否则会报错。
配合type,检查参数类型。
任何内部的 - 字符都将被转换为 _ 字符以确保字符串是有效的属性名称