- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python入门:argparse浅析 nargs='+'作用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
我就废话不多说了,大家还是直接看代码吧~ 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#aaa.py
#version 3.5
import
os
#这句是没用了,不知道为什么markdown在编辑代码时,不加这一句,就不能显示代码高亮[汗]
import
argparse
parser
=
argparse.ArgumentParser(description
=
'Process some integers...'
)
#初始化一个分析器
#parser.add_argument(中的参数)
#__init__(self, option_strings, dest, nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None)
parser.add_argument(
'integers'
,metavar
=
'N'
,
type
=
int
,nargs
=
'+'
,
help
=
'an integer for the accumulator'
)
#这是一个添加【位置参数】
#第一个参数是自定义的参数名,在代码中用来计算的(parser.parse_args().integers*2)
parser.add_argument(
'--sum'
,dest
=
'accumulate'
,action
=
'store_const'
,
const
=
sum
,default
=
max
,
help
=
'sum the integers(default:find the max)'
)
#这是一个添加【可选参数】
#第一个参数是自定义的参数【在代码中的使用parser.parse_args().sum】【在系统命令行中的使用:>python aaa.py --sum
args
=
parser.parse_args()
print
(args)
#Namespace(accumulate=<built-in function sum>, integers2=[1, 2, 3, 4])
print
(args.integers)
#integers要与上面的对应
print
(args.accumulate(args.integers))
#accumulate要与上面的对应
|
1
2
3
4
5
6
7
8
9
|
import
argparse
def
infer(args):
for
img
in
args.imgs:
print
(
"\n=== {} ==="
.
format
(img))
if
__name__
=
=
'__main__'
:
parser
=
argparse.ArgumentParser()
parser.add_argument(
'--imgs'
,
type
=
str
,nargs
=
'+'
)
args
=
parser.parse_args()
infer(args)
|
结果 。
补充知识:argparse解析命令行参数 。
argparse简介:
在argparse中,最常用的就是上述三部分了:创建一个ArgumentParser对象;使用add_argument()方法来为创建的ArgumentParser对象添加argument的解析规则;最后调用parse_args()来解析传入的内容,依据的是第二步制定的规则,生成的是一个Namespace对象,若未传参数给parse_args(),那么默认从sys.argv来获取命令行入参.
创建一个ArgumentParser:
函数原型为:
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) 。
1、prog:程序的名字,默认是argv[0]。若设置,则在帮助信息中,可以使用%(prog)s来作为格式化的引用(修改一处全局受用).
2、usage:帮助信息的usage字段,描述程序的各种用法,默认情况下会依据add_argument()来自动生成.
3、description:一个简单描述程序主要干啥以及怎么用的字符段,默认为空.
4、epilog:optional arguments字符段之后的字符段,默认为空.
5、parents:继承的父parser,为了避免一些公共的内容重复定义,父parser在初始化时会设置add_help=False,这是为了防止出现父与子parser的-h冲突而抛出异常.
6、formatter_class:对于help输出进行格式化,除了输出的样式外,如果设置为ArgumentDefaultsHelpFormatter,则会自动在help输出中添加已定义的default值.
7、prefix_chars:options前的字符,默认为'-',可以添加其他字符,如'-+',但是如果没有包括'-',那么对应的option如'-h'就无法解析.
8、fromfile_prefix_chars:有时会使用文件给parse_args()传入参数,为了能够识别文件字符串,如"demo.txt",需要设置此值,如"@",那么所有以此字符为开头的字符串都被当作是文件,所以传给parse_args()的参数应该是@demo.txt。在该文件中,一行只能有一个参数。如文件中的'-f\nbar'会被解析成['-f','bar'].
9、argument_default:一般情况下,默认值使用add_argument()来添加,或者使用set_defaults()设置一些键值对来添加。剩下一种情况就是设置此项(此处没看明白是咋回事).
10、conflict_handler:解决在add_argument()阶段有冲突的option的依据策略,默认为error即抛出异常。一般情况下遇到冲突是抛出异常即可,但是如果设置了parents,那么需要重写父parser中的规则的时候,就需要将此项设置为resolve,但是重写是精确匹配的,如老规则定义了-h/--help,重写了-h,那么--help还是老规则.
11、add_help:是否添加-h/--helpoption,默认为True。为False时,是要做parent(其实可以设置子Parser重写)。默认是-h/--help,若prefix_chars中没有包含'-',那么就以其中第一个字符作为代替.
调用add_argument()添加解析规则:
函数原型:
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][,metavar][, dest]) 。
1、name or flags:是位置参数,则需要传入名字;要是可选参数,则需要进行定义,如'-f','--foo'.
2、action:定义传入的参数如何处理.
action='store',默认取值,保存传入参数.
action='store_const',需要添加const,意味着该argument的值不从命令行输入,而是取const的值.
action='store_true' or action='store_false','store_const'的特殊情形,意味着const的值为True或False.
action='append',表示传入的值会作为一个列表的一项,意味着option可以在命令行中多次出现.
action='append_const',传入列表的项由const定义,通常用在需要多个argument将值传入一个列表中的场景.
action='count',输出argument出现的次数.
action='help',已默认添加.
action='version',需要定义version,使用时输出版本信息并退出.
自定义,通过定义一个argparse.Action子类来实现。实际上,上面的这些可选项都是通过这种形式定义的.
3、nargs:ArgumentParser对象通常将一个动作与一个命令行参数关联。nargs关键字参数将一个动作与不同数目的命令行参数关联在一起:
nargs=N,一个选项后可以跟多个参数(action='append'时,依然是一个选项后跟一个参数,只不过选项可以多次出现),参数的个数必须为N的值,这些参数会生成一个列表,当nargs=1时,会生成一个长度为1的列表.
nargs=?,如果没有在命令行中出现对应的项,则给对应的项赋值为default。特殊的是,对于可选项,如果命令行中出现了此可选项,但是之后没有跟随赋值参数,则此时给此可选项并不是赋值default的值,而是赋值const的值.
nargs=*,和N类似,但是没有规定列表长度.
nargs=+,和*类似,但是给对应的项当没有传入参数时,会报错error: too few arguments.
nargs=argparse.REMAINDER,所有剩余的参数,均转化为一个列表赋值给此项,通常用此方法来将剩余的参数传入另一个parser进行解析。如果nargs没有定义,则可传入参数的数量由action决定,通常情况下为一个,并且不会生成长度为一的列表.
4、const,一种是定义action='store_const'或action='append_const'时使用。一种是定义nargs='?'时,可选项出现在命令行中,但之后并没有跟随赋值的参数,作为默认值传给此可选项.
5、default:默认值.
如果是一个字符串,那么Parser解析的时候会将它作为命令行传入值,使用type的值来进行转换类型,但是如果不是的话,就会使用定义的值而不进行类型转换。如果设置了nargs='?'或nargs='*',那么当没有参数赋值给该项时,会使用default定义的值.
而default=argparse.SUPPRESS时,则表示命令行中未出现某一项时,不会对它进行默认赋值.
6、type:用于类型检查和类型转换.
使用FileType可简化对文件的操作。还可以自定义函数,输入是一个字符串,输出是转换后的字符串。当设置choices的时,类型检查会变得容易,因为只需要在一个范围内比较即可.
7、choices:给定了取值范围,超出会报错.
当type也有定义时,会先使用type进行类型检查,所以choices中的取值必须符合type的定义,否则在parse_args()时会报错。任何支持in操作符的均可作为choices的赋值,所以字典,列表,集合,等等其他容器均都支持.
8、required:默认情况下,可选项(前面有'-')被认为并不一定需要出现在命令行参数中,但是如果设置了required=True的话,则必须出现。此类设置违背人的常识,应避免使用.
9、help:帮助信息.
之前提到的%(prog)s可用于此处程序名的格式化,此外,还有%(default)s格式化default的值,%(type)s格式化type的值.
设置为argparse.SUPPRESS可不显示帮助信息.
10、metavar:在Parser生成帮助信息时,需要有字符代表需要传入的值。(这一段和dest相同,使用的就是dest的值)如果是位置参数,则用它本身代替;如果是可选参数,则使用它的大写来代替。使用metavar可替换默认的字符.
11、dest:大部分的选项都需要通过命令行来给其赋值,这些值的名字通过dest来定义,默认的规则如同metavar中所述.
调用parse_args()解析 。
函数原型:
ArgumentParser.parse_args(args=None, namespace=None) 。
将args转换为namespace对象的一个值。默认情况下,sys.argv赋值给args,一个空的Namespace对象会被创建。解析时,会对传入的参数进行检查,若不符合要求就会报错。一般情况下,会自动判断传入的值到底是一个可选参数,还是一个负数(都用'-'开头)。但有时位置参数的值必须是一个'-'开头的值,如'-f',那么使用parser.parse_args(['--', '-f']),'--'代表后续的所有传入值都需要看做是位置参数。parse_args()会返回填充好的Namespace对象 。
实例:
以faster rcnn代码中的命令行解析为例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#coding=utf-8
import
argparse
import
sys
def
parse_args():
parser
=
argparse.ArgumentParser(description
=
'Train a Fast R-CNN network'
)
parser.add_argument(
'--cfg'
, dest
=
'cfg_file'
,
help
=
'optional config file'
,default
=
None
,
type
=
str
)
parser.add_argument(
'--weight'
, dest
=
'weight'
,
help
=
'initialize with pretrained model weights'
,
type
=
str
)
parser.add_argument(
'--imdb'
, dest
=
'imdb_name'
,
help
=
'dataset to train on'
,default
=
'voc_2007_trainval'
,
type
=
str
)
parser.add_argument(
'--imdbval'
, dest
=
'imdbval_name'
,
help
=
'dataset to validate on'
,default
=
'voc_2007_test'
,
type
=
str
)
parser.add_argument(
'--iters'
, dest
=
'max_iters'
,
help
=
'number of iterations to train'
,default
=
70000
,
type
=
int
)
parser.add_argument(
'--tag'
, dest
=
'tag'
,
help
=
'tag of the model'
,default
=
None
,
type
=
str
)
parser.add_argument(
'--net'
, dest
=
'net'
,
help
=
'vgg16, res50, res101, res152, mobile'
,default
=
'res50'
,
type
=
str
)
parser.add_argument(
'--set'
, dest
=
'set_cfgs'
,
help
=
'set config keys'
, default
=
None
,nargs
=
argparse.REMAINDER)
if
len
(sys.argv)
=
=
1
:
parser.print_help()
sys.exit(
1
)
args
=
parser.parse_args()
return
args
if
__name__
=
=
'__main__'
:
args
=
parse_args()
print
(args)
|
将以上代码保存为test.py,然后在命令行输入:python test.py 。
结果为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
usage: test.py [
-
h] [
-
-
cfg CFG_FILE] [
-
-
weight WEIGHT] [
-
-
imdb IMDB_NAME]
[
-
-
imdbval IMDBVAL_NAME] [
-
-
iters MAX_ITERS] [
-
-
tag TAG]
[
-
-
net NET] [
-
-
set
...]
Train a Fast R
-
CNN network
optional arguments:
-
h,
-
-
help
show this
help
message
and
exit
-
-
cfg CFG_FILE optional config
file
-
-
weight WEIGHT initialize with pretrained model weights
-
-
imdb IMDB_NAME dataset to train on
-
-
imdbval IMDBVAL_NAME
dataset to validate on
-
-
iters MAX_ITERS number of iterations to train
-
-
tag TAG tag of the model
-
-
net NET vgg16, res50, res101, res152, mobile
-
-
set
...
set
config keys
|
在命令行输入
1
2
3
4
5
6
7
|
python test.py
-
-
weight data
/
imagenet_weights
/
vgg16.ckpt \
-
-
imdb voc_2007_trainval \
-
-
imdbval voc_2007_test \
-
-
iters
7000
\
-
-
cfg experiments
/
cfgs
/
vgg16.yml \
-
-
net vgg16 \
-
-
set
ANCHOR_SCALES
"[8,16,32]"
ANCHOR_RATIOS
"[0.5,1,2]"
TRAIN.STEPSIZE
"[50000]"
|
结果为:
Namespace(cfg_file='experiments/cfgs/vgg16.yml',imdb_name='voc_2007_trainval',imdbval_name='voc_2007_test', max_iters=7000, net='vgg16', set_cfgs=['ANCHOR_SCALES', '[8,16,32]', 'ANCHOR_RATIOS', '[0.5,1,2]', 'TRAIN.STEPSIZE', '[50000]'], tag=None, weight='data/imagenet_weights/vgg16.ckpt') 。
以上这篇python入门:argparse浅析 nargs='+'作用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/qq_37950540/article/details/82226961 。
最后此篇关于python入门:argparse浅析 nargs='+'作用的文章就讲到这里了,如果你想了解更多关于python入门:argparse浅析 nargs='+'作用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
很多朋友或许都有这个疑问,一个网站域名和网站的排名有关系吗?今天本文就从三个方面分析网站的域名与网站的排名有没有关系,希望对大家有一定的帮助。 1、全拼双拼域名 首先,我们要知道在这一点百
什么是进程 当一个程序进入内存中运行起来它就变为一个进程。因此,进程就是一个处于运行状态的程序。同时进程具有独立功能,进程是操作系统进行资源分配和调度的独立单位。 什么是线程 线程是进
最近几年,互联网络竞争异常激烈,各个企业为了增加业绩,都在网络销售中下足了功夫。要确定网站发展的方向,必须给自己的网站制定好一个发展目标,有了目标才能更好的发展。不管
一.基础知识准备: 1.层的原则: (1)每一层以接口方式供上层调用。 (2)上层只能调用下层。 (3)依赖分为松散交互和严格交互两种。 2.业务逻辑分类: (1)应
编程时一门技术,更是一门艺术 简单工厂模式利用面向对象方式通过继承、封装、多态把程序的耦合度降低,设计模式使得程序更加灵活,容易修改,易于复用。 下面是服务器计算器代码:
对于策略模式的理解:当一个业务有多种需求时候,在某个时候需要使用不同的方式来计算结果。这时候不同的方式可以理解为不同的策略来解决同样的问题。 例如:商场收银系统计算价格,1:正常计算 2:商品打折计
随着 Kubernetes 在企业中应用的越来越广泛和普及,越来越多的公司在生产环境中运维多个集群。本文主要讲述一些关于多集群 Kubernetes 的思考,包括为什么选择多集群,多集群的好处以
Kubelet 出于对节点的保护,允许在节点资源不足的情况下,开启对节点上 Pod 进行驱逐的功能。最近对 Kubelet 的驱逐机制有所研究,发现其中有很多值得学习的地方,总结下来
以下分析不针对任何快递公司,纯属实说。 申通快递在快递行业中速度与费用都属于中等的水平,在国内也分布有很多投递点,一般地区都可以投递到;顺丰在国内是速度最快的快递公司之一,一般来说隔天就能够到,其
概述 流(streams)是PHP4.3版本引入的一个特性,主要是为了统一文件、sockets以及其他类似资源的工作方法。PHP4.3距今已经有很长时间了,但是很多程序员似乎都不能正确使用PHP中
Pre 很早在看 Jesse 的 Asp.net Core快速入门 的课程的时候就了解到了在Asp .net core中,如果添加的Json配置被更改了,是支持自动重载配置的,作为一名有着严重&q
之前对closure一知半解,在网上也找不到一篇文章能把它说清楚,今天好像第一次对它有点清晰的了解 了,写个BLOG记念一下 lua的函数是一种 First-Class Value 的东西, 到底
1、什么是默认方法,为什么要有默认方法 简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法。只需在方法名前面加个default关键字即可。 为什么要有这个特性?首先,之前的接口是个双
信息数据传输的安全一直都是个很重要的话题,从刚开始当程序员时错以为MD5、SHA1这些哈希算法就是加密算法,到后来慢慢接触对称加密、非对称加密这些概念,再到对接各种大开发平台接口的时候看到他们通
前言 2021年,vanilla-extract 作为黑马登顶了 css-in-js 满意度榜首(虽然使用率仅为1%),号称是一个类型安全、高度兼容 TS 场景的库,国内相关讨论还很少,稍微看
(一)响应式数据 1. 简单例子 从最简单的数据绑定开始,在 Vue 2.0 中,我们这样将一个数据绑定到模板的指定位置: 在组件创建参数的 data 构造函数中返回一个用来绑定的数据对象,其
我是一名优秀的程序员,十分优秀!