欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python入門:argparse淺析 nargs='+'作用

 更新時間:2020年07月12日 15:53:18   作者:gorgeous___youth  
這篇文章主要介紹了python入門:argparse淺析 nargs='+'作用,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,大家還是直接看代碼吧~

#aaa.py
#version 3.5
import os #這句是沒用了,不知道為什么markdown在編輯代碼時,不加這一句,就不能顯示代碼高亮[汗]
import argparse

parser = argparse.ArgumentParser(description='Process some integers...') #初始化一個分析器
#parser.add_argument(中的參數(shù))
#__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') 
   #這是一個添加【位置參數(shù)】
   #第一個參數(shù)是自定義的參數(shù)名,在代碼中用來計算的(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)')
   #這是一個添加【可選參數(shù)】
   #第一個參數(shù)是自定義的參數(shù)【在代碼中的使用parser.parse_args().sum】【在系統(tǒng)命令行中的使用:>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要與上面的對應
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解析命令行參數(shù)

argparse簡介:

在argparse中,最常用的就是上述三部分了:創(chuàng)建一個ArgumentParser對象;使用add_argument()方法來為創(chuàng)建的ArgumentParser對象添加argument的解析規(guī)則;最后調用parse_args()來解析傳入的內容,依據(jù)的是第二步制定的規(guī)則,生成的是一個Namespace對象,若未傳參數(shù)給parse_args(),那么默認從sys.argv來獲取命令行入?yún)ⅰ?/p>

創(chuàng)建一個ArgumentParser:

函數(shù)原型為:

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字段,描述程序的各種用法,默認情況下會依據(jù)add_argument()來自動生成。

3、description:一個簡單描述程序主要干啥以及怎么用的字符段,默認為空。

4、epilog:optional arguments字符段之后的字符段,默認為空。

5、parents:繼承的父parser,為了避免一些公共的內容重復定義,父parser在初始化時會設置add_help=False,這是為了防止出現(xiàn)父與子parser的-h沖突而拋出異常。

6、formatter_class:對于help輸出進行格式化,除了輸出的樣式外,如果設置為ArgumentDefaultsHelpFormatter,則會自動在help輸出中添加已定義的default值。

7、prefix_chars:options前的字符,默認為'-',可以添加其他字符,如'-+',但是如果沒有包括'-',那么對應的option如'-h'就無法解析。

8、fromfile_prefix_chars:有時會使用文件給parse_args()傳入?yún)?shù),為了能夠識別文件字符串,如"demo.txt",需要設置此值,如"@",那么所有以此字符為開頭的字符串都被當作是文件,所以傳給parse_args()的參數(shù)應該是@demo.txt。在該文件中,一行只能有一個參數(shù)。如文件中的'-f\nbar'會被解析成['-f','bar']。

9、argument_default:一般情況下,默認值使用add_argument()來添加,或者使用set_defaults()設置一些鍵值對來添加。剩下一種情況就是設置此項(此處沒看明白是咋回事)。

10、conflict_handler:解決在add_argument()階段有沖突的option的依據(jù)策略,默認為error即拋出異常。一般情況下遇到?jīng)_突是拋出異常即可,但是如果設置了parents,那么需要重寫父parser中的規(guī)則的時候,就需要將此項設置為resolve,但是重寫是精確匹配的,如老規(guī)則定義了-h/--help,重寫了-h,那么--help還是老規(guī)則。

11、add_help:是否添加-h/--helpoption,默認為True。為False時,是要做parent(其實可以設置子Parser重寫)。默認是-h/--help,若prefix_chars中沒有包含'-',那么就以其中第一個字符作為代替。

調用add_argument()添加解析規(guī)則:

函數(shù)原型:

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][,metavar][, dest])

1、name or flags:是位置參數(shù),則需要傳入名字;要是可選參數(shù),則需要進行定義,如'-f','--foo'。

2、action:定義傳入的參數(shù)如何處理。

action='store',默認取值,保存?zhèn)魅雲(yún)?shù)。

action='store_const',需要添加const,意味著該argument的值不從命令行輸入,而是取const的值。

action='store_true' or action='store_false','store_const'的特殊情形,意味著const的值為True或False。

action='append',表示傳入的值會作為一個列表的一項,意味著option可以在命令行中多次出現(xiàn)。

action='append_const',傳入列表的項由const定義,通常用在需要多個argument將值傳入一個列表中的場景。

action='count',輸出argument出現(xiàn)的次數(shù)。

action='help',已默認添加。

action='version',需要定義version,使用時輸出版本信息并退出。

自定義,通過定義一個argparse.Action子類來實現(xiàn)。實際上,上面的這些可選項都是通過這種形式定義的。

3、nargs:ArgumentParser對象通常將一個動作與一個命令行參數(shù)關聯(lián)。nargs關鍵字參數(shù)將一個動作與不同數(shù)目的命令行參數(shù)關聯(lián)在一起:

nargs=N,一個選項后可以跟多個參數(shù)(action='append'時,依然是一個選項后跟一個參數(shù),只不過選項可以多次出現(xiàn)),參數(shù)的個數(shù)必須為N的值,這些參數(shù)會生成一個列表,當nargs=1時,會生成一個長度為1的列表。

nargs=?,如果沒有在命令行中出現(xiàn)對應的項,則給對應的項賦值為default。特殊的是,對于可選項,如果命令行中出現(xiàn)了此可選項,但是之后沒有跟隨賦值參數(shù),則此時給此可選項并不是賦值default的值,而是賦值const的值。

nargs=*,和N類似,但是沒有規(guī)定列表長度。

nargs=+,和*類似,但是給對應的項當沒有傳入?yún)?shù)時,會報錯error: too few arguments。

nargs=argparse.REMAINDER,所有剩余的參數(shù),均轉化為一個列表賦值給此項,通常用此方法來將剩余的參數(shù)傳入另一個parser進行解析。如果nargs沒有定義,則可傳入?yún)?shù)的數(shù)量由action決定,通常情況下為一個,并且不會生成長度為一的列表。

4、const,一種是定義action='store_const'或action='append_const'時使用。一種是定義nargs='?'時,可選項出現(xiàn)在命令行中,但之后并沒有跟隨賦值的參數(shù),作為默認值傳給此可選項。

5、default:默認值。

如果是一個字符串,那么Parser解析的時候會將它作為命令行傳入值,使用type的值來進行轉換類型,但是如果不是的話,就會使用定義的值而不進行類型轉換。如果設置了nargs='?'或nargs='*',那么當沒有參數(shù)賦值給該項時,會使用default定義的值。

而default=argparse.SUPPRESS時,則表示命令行中未出現(xiàn)某一項時,不會對它進行默認賦值。

6、type:用于類型檢查和類型轉換。

使用FileType可簡化對文件的操作。還可以自定義函數(shù),輸入是一個字符串,輸出是轉換后的字符串。當設置choices的時,類型檢查會變得容易,因為只需要在一個范圍內比較即可。

7、choices:給定了取值范圍,超出會報錯。

當type也有定義時,會先使用type進行類型檢查,所以choices中的取值必須符合type的定義,否則在parse_args()時會報錯。任何支持in操作符的均可作為choices的賦值,所以字典,列表,集合,等等其他容器均都支持。

8、required:默認情況下,可選項(前面有'-')被認為并不一定需要出現(xiàn)在命令行參數(shù)中,但是如果設置了required=True的話,則必須出現(xiàn)。此類設置違背人的常識,應避免使用。

9、help:幫助信息。

之前提到的%(prog)s可用于此處程序名的格式化,此外,還有%(default)s格式化default的值,%(type)s格式化type的值。

設置為argparse.SUPPRESS可不顯示幫助信息。

10、metavar:在Parser生成幫助信息時,需要有字符代表需要傳入的值。(這一段和dest相同,使用的就是dest的值)如果是位置參數(shù),則用它本身代替;如果是可選參數(shù),則使用它的大寫來代替。使用metavar可替換默認的字符。

11、dest:大部分的選項都需要通過命令行來給其賦值,這些值的名字通過dest來定義,默認的規(guī)則如同metavar中所述。

調用parse_args()解析

函數(shù)原型:

ArgumentParser.parse_args(args=None, namespace=None)

將args轉換為namespace對象的一個值。默認情況下,sys.argv賦值給args,一個空的Namespace對象會被創(chuàng)建。解析時,會對傳入的參數(shù)進行檢查,若不符合要求就會報錯。一般情況下,會自動判斷傳入的值到底是一個可選參數(shù),還是一個負數(shù)(都用'-'開頭)。但有時位置參數(shù)的值必須是一個'-'開頭的值,如'-f',那么使用parser.parse_args(['--', '-f']),'--'代表后續(xù)的所有傳入值都需要看做是位置參數(shù)。parse_args()會返回填充好的Namespace對象

實例:

以faster rcnn代碼中的命令行解析為例:

#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

結果為:

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

在命令行輸入:

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='+'作用就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python中raise用法簡單實例(超級詳細,看了無師自通)

    Python中raise用法簡單實例(超級詳細,看了無師自通)

    python中raise語句用于手動觸發(fā)異常,通過raise語句可以在代碼中顯式地引發(fā)異常,從而使程序進入異常處理流程,下面這篇文章主要給大家介紹了關于Python中raise用法的相關資料,需要的朋友可以參考下
    2024-03-03
  • python GUI庫圖形界面開發(fā)之PyQt5信號與槽機制、自定義信號基礎介紹

    python GUI庫圖形界面開發(fā)之PyQt5信號與槽機制、自定義信號基礎介紹

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5信號與槽機制基礎介紹,需要的朋友可以參考下
    2020-02-02
  • python同義詞替換的實現(xiàn)(jieba分詞)

    python同義詞替換的實現(xiàn)(jieba分詞)

    這篇文章主要介紹了python同義詞替換的實現(xiàn)(jieba分詞),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • Python學習之加密模塊使用詳解

    Python學習之加密模塊使用詳解

    加密模塊在工作中被廣泛應用。比如數(shù)據(jù)的傳入 不希望被捕獲,通過把數(shù)據(jù)加密,這樣即使被捕獲也無法獲取到數(shù)據(jù)的真實信息。本文將學習一下Python中的加密模塊的使用 方法,需要的可以參考一下
    2022-03-03
  • 用python完成一個分布式事務TCC

    用python完成一個分布式事務TCC

    這篇文章主要介紹了用python完成一個分布式事務TCC,文章里我們介紹了TCC的理論知識,也通過一個例子,完整給出了編寫一個TCC事務的過程,涵蓋了正常成功完成,以及成功回滾的情況,需要的朋友可以參考一下文章的具體內容
    2021-10-10
  • 淺談一下python中threading模塊

    淺談一下python中threading模塊

    這篇文章主要介紹了一下python中threading模塊,threading提供了一個比thread模塊更高層的API來提供線程的并發(fā)性。這些線程并發(fā)運行并共享內存,需要的朋友可以參考下
    2023-04-04
  • Python全棧之協(xié)程詳解

    Python全棧之協(xié)程詳解

    這篇文章主要為大家介紹了Python全棧之協(xié)程,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • python基礎之匿名函數(shù)介紹

    python基礎之匿名函數(shù)介紹

    大家好,本篇文章主要講的是python基礎之匿名函數(shù)介紹,感興趣的同學趕快來看一看,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 基于Python實現(xiàn)簡易的自制頭像神器

    基于Python實現(xiàn)簡易的自制頭像神器

    作為一個不會PS的普通程序員要怎么快速制作一個屬于自己的漸變頭像呢?十行 Python代碼就能解決,非常簡單。感興趣的小伙伴可以跟隨小編一起學習一下
    2022-01-01
  • Python實現(xiàn)識別圖像中人物的示例代碼

    Python實現(xiàn)識別圖像中人物的示例代碼

    這篇文章主要介紹了通過face_recognition提供的demo代碼,簡單調整了一下,從而實現(xiàn)識別圖像中人物的功能,感興趣的可以跟隨小編一起試試
    2022-01-01

最新評論