mg4377娱乐娱城官网_mg4377娱乐手机版_www.mg4377.com

行使分别介绍,函数形参

时间:2019-06-04 17:17来源:mg4377娱乐手机版
在python中,命令行深入分析的很好用, python命令行深入分析之parse_known_args()函数和parse_args()使用分别介绍, 在python中,命令行剖析的很好用, 第一导入命令行剖判模块 import argparse

在python中,命令行深入分析的很好用,

python命令行深入分析之parse_known_args()函数和parse_args()使用分别介绍,

在python中,命令行剖析的很好用,

第一导入命令行剖判模块

import argparse
import sys

接下来创立对象

parse=argparse.ArgumentParser()

下一场扩展命令行

parse.add_argument("--learning_rate",type=float,default=0.01,help="initial learining rate")
parse.add_argument("--max_steps",type=int,default=2000,help="max")
parse.add_argument("--hidden1",type=int,default=100,help="hidden1")

对此函数add_argumen()第三个是选用,第三个是数据类型,第多少个私下认可值,第多个是help命令时的表达
然后用arg=parse.parse_args(sys.argv[1:])

中间参数sys.argv[1:]是命令行语句中从第3个到最后。如在ubuntu下输入指令行python gg.py --learning_rate 20 --max_steps 10

则sys.argv[1:0]=--learning_rate 20 --max_steps 10

输出的arg为namespace空间,结果是Namespace(hidden1=100, learning_rate=20.0, max_steps=10)
但是parse_known_args()函数输出结果为

te 20 --max_steps 10
20.0
10
100

程序:

import argparse
import sys

parse=argparse.ArgumentParser()
parse.add_argument("--learning_rate",type=float,default=0.01,help="initial learining rate")
parse.add_argument("--max_steps",type=int,default=2000,help="max")
parse.add_argument("--hidden1",type=int,default=100,help="hidden1")
flags,unparsed=parse.parse_known_args(sys.argv[1:])
print flags.learning_rate
print flags.max_steps
print flags.hidden1
print unparsed

出口结果:
20.0
10
100
[]

程序:
20.0
10
100
那七个函数的机能差不离

在python中,命令行深入分析的很好用, 首起先入命令行剖析模块 import argpar...

getopt:和C中的getopt()等价。
optparse:贰.柒后已不推荐应用。
argparse:基于optparse的新库。
docopt:根据文书档案描述,自动生成。另一份参照他事他说加以考查文书档案:docopt。

python 函数形参 实参的界别,python函数不同

在采纳python的进程中,发掘当函数参数为list的时候,在函数内部调用list.append()会转移形参,与C/C 的不太雷同,查阅有关资料,在此处记录一下。

python中id能够获取对象的内部存款和储蓄器地址

>>> num1 = 10
>>> num2 = num1
>>> num3 = 10
>>> id(num1)
4299190320
>>> id(num2)
4299190320
>>> id(num3)
4299190320

能够看到num一、num2、num三八个对象指向的是贰个地点,python在此间运用的是壹种叫做引用计数的诀要来成功的,很类似C zhong的智能指针,变量赋值给变量相当于同1对象引用计数器 一,而不是重新分配空间。

对于list对象能够看来上面包车型地铁结果:

>>> list1 = [0,1]
>>> list2 = [0,1]
>>> id(list1)
4302498128
>>> id(list2)
4302498056
>>> list3 = list1
>>>id(list3)
4302498128

list1与list3指向同壹空间,list二指向其余的一处地方。

python中的函数字传送参是目标传递,同临时间也存在部分与全局的题目,在传参进度中留存八个规则:

  • 由此引用将参数复制到局地效能域的对象中,意味着被用来访问函数参数的变量于加强给函数的靶子毫无干系,因为存在3个复制难点,这和C语言是同样的。而且修改部分对象不会变动原本数据。
  • 能够在适宜地方修改可变对象。可变对象首要便是列表和字典,那些适当地方实质上就是日前深入分析的局地子对象的修改不会退换字典对象或许列表对象的ID
def incrInt(num):
    pId(num)
    num  = 1;
    pId(num)

def incrList(listArg):
    pId(listArg)
    listArg.append(1);
    pId(listArg)
def pId(arg):
    print id(arg)
num1 = 10
pId(num1)
incrInt(num1)
print(num1)

list1 = [0,2]
pId(list1)
incrList(list1)
print(list1)

结果如下:

 python test.py
4299181904
4299181904
4299181880
10
4336979912
4336979912
4336979912
[0, 2, 1]

能够见到在函数内部,改换int的数值,则num指向了另一块内部存款和储蓄器地址,而修改list,则是在同一块内存地址。

在python中,对象可分为可变(mutable)和不可变(immutable)两连串型,元组(tuple)、数值型(number)、字符串(string)均为不可变对象,而字标准(dictionary)和列表(list)的指标是可变对象。

由此在传参进程中要注意下。

参照他事他说加以考查文章:

 

函数形参 实参的差别,python函数差异在行使python的经过中,发掘当函数参数为list的时候,在函数内部调用list.append()会改造形参,与...

率先河入命令行深入分析模块

行使分别介绍,函数形参。更详实的源委可参照他事他说加以考察上述文书档案。

import argparse
import sys

getopt


若对C的getopt()函数不熟识,也许倾向于采取较少的代码,也许需求对扶掖新闻和错误音信有越来越高须求,以上景况优先选拔argparse
该模块首要提供五个函数,以及三个非凡判定。

getopt.getopt(args, options[, long_options])
args是供给分析的列表,平日状态下,是sys.argv[1:]
options是分析列表时选取的范式,尽管某壹项(单个字母)前面须求参数,则在此项后增添':'
long_options总得是字符串列表,字符串开首的'--'不可能包蕴,若某1项前边必要参数,则在此项后增多'='。可选型的参数是不扶助long_options的。是依附输入是还是不是是字符串列表中唯一一项的前缀来协作的。
再次来到值分为三个部分。第三有个别是(option, value)格式的列表,第二局部是剖判完后剩余部分。

getopt.gnu_getopt(args, options[, long_options])
效果同上。
有别于在于getopt()若是相遇未配备的选项,就能够告一段落分析。而此函数使用GNU规则,即已配置的精选和未配备的选择是足以勾兑的。

exception getopt.GetoptError**
当四个无法甄其余选项,恐怕三个供给要有参数字传送入的选项未传入参数时,抛出此丰裕。
exception getopt.
error**
GetoptError的旧名,为了向后卓越而保留。

切切实实实例可参照文书档案,不推荐应用。

下一场创立对象

argparse


四个简练例子:

import argparse

parser = argparse.ArgumentParser(description='Example with long option names')

parser.add_argument('--noarg', action="store_true", default=False)
parser.add_argument('--witharg', action="store", dest="witharg")
parser.add_argument('--witharg2', action="store", dest="witharg2", type=int)

print parser.parse_args(['--noarg', '--witharg', 'val', '--witharg2=3'])

argparse中,最常用的正是上述三有些了:创造三个ArgumentParser对象;使用add_argument()办法来为创建的ArgumentParser目的增多argument的解析规则;最后调用parse_args()来分析传入的剧情,依靠的是第2步制定的条条框框,生成的是三个Namespace对象,若未传参数给parse_args(),那么默许从sys.argv来取得命令行入参。

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)
prog:程序的名字,默许是argv[0]。若设置,则在帮助新闻中,能够选拔%(prog)s来作为格式化的引用(修改一处全局受用)。
usage:帮衬新闻的usage字段,描述程序的各样用法,暗中同意情状下会根据add_argument()来源动生成。
description:3个简易描述程序首要干啥以及怎么用的字符段。位于usage字符段和optional arguments字符段之间。
epilogoptional arguments字符段之后的字符段。
parents:承继的父parser,为了防止有个别公家的剧情重复定义,父parser在先河化时会设置add_help=False,那是为了防止出现父与子parser的-h抵触而抛出极度。
formatter_class:对于help输出进行格式化,除了输出的样式外,即使设置为ArgumentDefaultsHelpFormatter,则会自动在help输出中增加已定义的default值。
prefix_chars:options前的字符,默认为'-',能够增添别的字符,如'- ',不过只要未有包蕴'-',那么相应的option如'-h'就无法深入分析。
fromfile_prefix_chars:有的时候会动用文件给parse_args()传播参数,为了能够辨识文件字符串,如"demo.txt",须求安装此值,如"@",那么全部以此字符为始发的字符串都被视作是文本,所以传给parse_args()的参数应该是@demo.txt。在该文件中,1行只可以有2个参数。如文件中的'-fnbar'会被深入分析成['-f','bar']
argument_default:一般景观下,暗中同意值使用add_argument()来充足,或然应用set_defaults()设置有些键值对来丰硕。剩下1种情景正是设置此项(此地没看了解是咋回事)。
conflict_handler:解决在add_argument()等第有争辩的option的依赖政策,默觉得error即抛出特别。一般境况下遭受争持是抛出十二分就能够,不过只要设置了parents,那么需求重写父parser中的规则的时候,就须要将此项设置为resolve,但是重写是正确相配的,如老规则定义了-h/--help,重写了-h,那么--help抑或老规则。
add_help:是或不是丰硕-h/--helpoption,默以为True。为False时,是要做parent(其实能够安装子Parser重写)。暗中同意是-h/--help,若prefix_chars中尚无包涵'-',那么就以内部第叁个字符作为代表。

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][,metavar][, dest])
name or flags:是岗位参数,则须求传入名字;纵然可选参数,则供给举行定义,如'-f','--foo'。
action:定义传入的参数怎么着管理。

  • action='store',私下认可取值,保存传入参数。
  • action='store_const',供给加上const,意味着该argument的值不从命令行输入,而是取const的值。
  • action='store_true' or action='store_false''store_const'的奇异情状,意味着const的值为TrueFalse
  • action='append',表示传入的值会作为2个列表的一项,意味着option能够在命令行中数拾三回产出。
  • action='append_const',传入列表的项由const概念,常常用在急需八个argument将值传入3个列表中的场景。
  • action='count',输出argument出现的次数。
  • action='help',已暗中同意加多。
  • action='version',须求定义version,使用时输出版本信息并脱离。
  • 自定义,通过定义一个argparse.Action子类来贯彻。实际上,上边的那么些可选取都以因此这种样式定义的。

nargs:平常三个选项后跟一个参数,通过设置此项能够实现不相同意况。

  • nargs=N,三个抉择后能够跟八个参数(action='append'时,依旧是三个增选后跟一个参数,只不过选项能够频繁涌出),参数的个数必须为N的值,那个参数会转移贰个列表,当nargs=1时,会变动贰个尺寸为1的列表。
  • nargs=?,假设未有在命令行中出现对应的项,则给相应的项赋值为default。特殊的是,对于可选取,若是命令行中出现了此可挑选,可是之后未有跟随赋值参数,则此时给此可选择并不是赋值default的值,而是赋值const的值。
  • nargs=*,和N好像,不过没有规定列表长度。
  • nargs= ,和*临近,可是给相应的项当未有传来参数时,会报错error: too few arguments
  • nargs=argparse.REMAINDER,所有盈余的参数,均转载为2个列表赋值给此项,日常用此方法来将剩余的参数字传送入另2个parser进行辨析。

如果nargs一向不概念,则可传唱参数的数量由action调控,常常状态下为一个,并且不会变动长度为1的列表。
const,一种是概念action='store_const'action='append_const'时利用。壹种是概念nargs='?'时,可挑选出今后指令行中,但自此并未有跟随赋值的参数,作为私下认可值传给此可选项。
default:默认值。
1经是多少个字符串,那么Parser剖析的时候会将它作为命令行传入值,使用type的值来开展改造类型,可是1旦不是的话,就能选择定义的值而不开始展览类型转变。
假如设置了nargs='?'nargs='*',那么当未有参数赋值给该项时,会接纳default概念的值。
default=argparse.SUPPRESS时,则表示命令行中未出现某壹项时,不会对它进行私下认可赋值。
type:用于项目检查和类型调换。
使用FileType可简化对文件的操作。
仍能够自定义函数,输入是叁个字符串,输出是改造后的字符串。
当设置choices的时,类型检查会变得轻易,因为只要求在几个限制内相比即可。
choices:给定了取值范围,高出会报错。
type也可以有定义时,会先使用type打开项目检查,所以choices中的取值必须符合type的定义,否则在parse_args()时会报错。
别的帮忙in操作符的均可看成choices的赋值,所以字典,列表,集结,等等别的容器均都接济。
required:默许意况下,可选拔(前边有'-')被认为并不一定须求现身在命令行参数中,不过倘若设置了required=True的话,则必须出现。此类设置违背人的常识,应幸免使用。
help:支持消息。
事先提到的%(prog)s可用以此处程序名的格式化,别的,还应该有%(default)s格式化default的值,%(type)s格式化type的值。
设置为argparse.SUPPRESS可不展现帮忙音信。
metavar:在Parser生成扶助消息时,需求有字符代表需求传入的值。(那一段和dest平等,使用的正是dest的值)若是是岗位参数,则用它本人代表;假如是可选参数,则选择它的大写来代替。使用metavar可替换暗中同意的字符。
dest:大多数的选项都亟待经过命令行来给其赋值,那一个值的名字通过dest来定义,默许的平整仿佛metavar中所述。

ArgumentParser.parse_args(args=None, namespace=None)
args转换为namespace指标的2个值。暗中认可情状下,sys.argv赋值给args,二个空的Namespace指标会被创设。
深入分析时,会对传播的参数举行反省,若不符合要求就能报错。
一般意况下,会自行判定传入的值到底是3个可选参数,还是2个负数(都用'-'开首)。但偶然地方参数的值必须是贰个'-'开首的值,如'-f',那么使用parser.parse_args(['--', '-f'])'--'代表继续的装有传入值都亟待用作是岗位参数。
parse_args()会回到填充好的Namespace对象,若要将它产生字典,可选取Python自带的vars()

vars(...)
    vars([object]) -> dictionary   
    Without arguments, equivalent to locals().
    With an argument, equivalent to object.__dict__.

也能够使用Namespace,而是传入1个超前转移的对象。

其他
ArgumentParser.add_subparsers([title][, description][, prog][, parser_class][, action][, option_string][, dest][, help][, metavar])用来定义子Parser。
class argparse.FileType(mode='r', bufsize=None)用来给add_argument()中的type参数赋值。
ArgumentParser.add_argument_group(title=None, description=None)定义2个组。
ArgumentParser.add_mutually_exclusive_group(required=False)定义组中只好有贰个选用出现。
ArgumentParser.set_defaults(kwargs)设置私下认可值。
ArgumentParser.get_default(dest)获取暗中认可值。
ArgumentParser.print_usage(file=None)
ArgumentParser.print_help(file=None)
ArgumentParser.format_usage()
ArgumentParser.format_help()以上各类都以帮扶音信有关的。
ArgumentParser.parse_known_args(args=None, namespace=None)只深入分析知道的局地。
ArgumentParser.convert_arg_line_to_args(arg_line)
ArgumentParser.exit(status=0, message=None)
ArgumentParser.error(message)

parse=argparse.ArgumentParser()

docopt


观点是好的救助消息应该正好包蕴生成命令行深入分析器所急需的满贯音信。

docopt.docopt(doc, argv=None, help=True, version=None, options_first=False)
doc参数能够是叁个模块的docstring(__doc__),只怕是其余符合格式的帮手消息。
argv私下认可境况下选取sys.argv[1:],可能能够应用八个字符串。
help默认为True,当输入-h--help后(需提前安装好),分析器可以自动生成对应的帮扶文本。需求手动管理的可设置为False。
version版本音信,是可选参数。
options_first默以为False。当设置为True时,不一样意可选参数和岗位参数实行混合,即在产出的首先个任务参数之后的享有参数,均被当做是岗位参数,这是为了和POSIX保持相当。
重返值是3个字典,key是option,value正是对应输入的参数。

帮扶消息格式分为两局地,Usage patternOption descriptions。唯有顺应格式的字符串才会被辨认并深入分析,其他字符串会被忽视。
Usage pattern
举例:

Usage: my_program.py [-hso FILE] [--quiet | --verbose] [INPUT ...]

Usage pattern是doc的子字符串。伊始于usage:(大小写不灵敏),截至于1行空行。
位于usage:自此的第一个单词是程序的名字,能够再一次数次进展不一致pattern的概念。

"""
Usage: my_program.py FILE 
       my_program.py COUNT FILE
"""

每一个pattern都由以下部分构成。
一个是<arguments>, ARGUMENTS格式的概念,要么是用尖括号包蕴,要么是大写。
再有2个是-options,必须求以“-”起始,可以饭店多数少个option,如-oiv等价于-o -i -v。option是足以有参数的,如-f FILE-f=FILE-fFILE,都是等价的。别的部分挑选在尘间的option descriptions中实行实际定义。
最后贰个是commands,除了上述聊到的三种状态,剩下的格式,再加上七个奇特的指令:单个的“-”和双个的“-”,那一个都归属于此。

commands中,[ ]代表可选。( )意味着必须存在,全数未有用[ ]卷入的字符串都暗中认可被( )包裹。
|是管道符,若某三个挑选必须存在,则将她们用( )包裹,如my_program.py(--clockwise | --counter-clockwise) TIME,若都以可采纳,则用[ ]包裹,如my_program.py[--left | --right]
...代表有三个或七个要素,如my_program.py FILE ...表示一个或多少个FILE可承受,而my_program.py [FILE ...]表示0个或四个FILE可接受。
[options](大小写敏感)是大4options的缩写。能够选取它来定义该pattern能够使用其余在世间Option descriptions中定义的option。
[--]是为着分隔可选参数和职位参数,如Usage: my_program [options] [--] <file>...,当中中括号可去除,变为必填项。
[-]若出现,则象征程序须要使用stdin,禁用file。而单个的-则是3个平常字符。

假定在usage pattern中再次出现同名地方参数数次,可能同名有参数的可选参数数十次,那么传入的值会被分析成二个列表。如Usage: my_program.py <file> <file> --path=<path>...的结果会是args['<file>'] == ['file1', 'file2']以及args['--path'] == ['./here', './there']

Option descriptions
举例:

-h --help    show this
-s --sorted  sorted output
-o FILE      specify output file [default: ./test.txt]
--quiet      print less text
--verbose    print more text

此部分位于usage pattern下方,它能够有叁下边功效:定义同义的短option和长option;有个别option是还是不是必要传入参数;有个别option是或不是有暗中同意参数。
规则如下:
每行定义3个option,必须以多少个或多少个“-”开首。
为定义要求传入的参数,能够在相应的option后方加上1个字符串,两个以空格或“=”相隔,两者都是行得通的,但推荐只使用一种风格。

-o FILE --output=FILE       # without comma, with "=" sign
-i <file>, --input <file>   # with comma, wihtout "=" sign

选拔多个空格来将option本人与它的叙述想分隔(依照示例应该是起码三个空格)。

--verbose More text.   # BAD, will be treated as if verbose option had
                       # an argument "More", so use 2 spaces instead
-q        Quit.        # GOOD
-o FILE   Output file. # GOOD
--stdout  Use stdout.  # GOOD, 2 spaces

在option对应的叙述后方举行私下认可参数的安装,格式是[default:<my-default-value>]

--coefficient=K  The K coefficient [default: 2.95]
--output=FILE    Output file [default: test.txt]
--directory=DIR  Some directory [default: ./]

若某option是可再一次的,则暗许参数会以空格作为分割符举办分割,生成多个字符串列表。否则,作为三个字符串全部。

docopt不适用于大型多档次的命令行参数剖析(举个例子git,不过官方给出了三个example)。相同的时候它未有对数码的校验功效,不可能向用户报错。
使用try docopt可开始展览docopt在线命令行参数剖析。

编辑:mg4377娱乐手机版 本文来源:行使分别介绍,函数形参

关键词: Python随笔 I need Pytho