天天看點

python自學argparse子產品argparse子產品使用步驟通過add_argument()方法添加各種參數将輸出轉化為字典在程式中使用總結

argparse是python用于解析指令行參數和選項的标準子產品,用于代替已經過時的optparse子產品

import argparse # 導入子產品,這個沒什麼說的

parser = argparse.ArgumentParser() # 執行個體化一個對象,預設參數一堆,隻有description參數可以設定一下

parser.add_argument() # 一次加入每一個參數或選項,主要是這裡

parser.parse_args() # 擷取參數,用的時候給他賦個值

上面的例子運作後,由于沒有添加任何參數,是以看不出什麼。不過可以加上-h 或 --help 運作一下,會顯示我們自定義的description的内容,以及預設的help的内容

添加參數的過程就是,反複調用add_argument()方法,一次加入一個參數。另外加入參數的同時,help的内容也會自動添加。

此時再運作程式,會提示你缺少參數。必須帶上一個參數運作,比如<code>test.py arg_test</code>。并且後面的參數隻能是1個,就是不能多也不能少。

此時再次使用-h 或 --help 看一個幫助,會自動加上添加的參數,但是隻有參數名,并沒有說明

調用add_argument()方法是,設定關鍵參數help,來添加參數說明

此時再看一下help

所有的參數輸入都是str類型,如果需要使用int類型的參數,通過關鍵參數type可以友善的實作

現在關鍵參數必須是數字,而且調用的時候顯示的類型也是int類型了

還是上面的type參數,可以設定type值為檔案,比如: <code>type=argparser.FileType('r'))</code> 直接對檔案進行操作。下面是參數直接輸入一個檔案路徑後列印檔案内容的例子:

将參數指派給了位置參數'file',是以args.fine就是檔案句柄,并且按type的要求打開了檔案

從剛才開始必須要帶參數才能運作程式了,可以通過設定預設值來解決不帶參數啟動的問題

現在不帶參數也可以正常啟動程式了,如果不跟參數,預設設定為default的值。這個用<code>default='0'</code>也是一樣的哦,因為前面定義了type。但是如果沒有定義type,那麼用<code>default=1</code>的話傳輸的參數是int,但是你自己自定義參數的話,就無法傳入int類型了。

nargs的作用是用來限定輸入這個參數的個數,預設情況下我們必須輸入1個,使用'?'的話,就是允許不輸入或者輸入一個。'+'的話表示是1個或多個,也可以使用數字或者'*' 就是允許多個參數,此時所有參數将組成一個清單,就是設為1也就一個清單和預設的情況不一樣

使用choise關鍵參數,可以限定這個參數的值必須在候選的清單内。

這樣隻有輸入正确才能正常執行,這裡注意,如果有default,那麼default的值也得再候選值之中。

像-h 和 --help 一樣,也可以設定自己的選項參數。設定的時候短參數和長參數可以值設定一個,如果沒有沖突的話建議都寫上。另外上面講過的那些關鍵參數,比如說明、預設值、候選值都可以使用

如果有長參數,取值的時候就是使用長參數的名字取值。隻有短參數的情況下才是用短參數的名字取值。當然也可以指定一個别的變量名。

和位置參數相反,選項參數預設是非必須。不輸入選項的情況下取到的值是None,輸入選項但是又沒在後面寫值而且也沒預設值,則會出錯。

如果需要,也可以将選項設定為必須輸入。

就如上面講的,執行選項參數的變量名

使用<code>required=True</code> 後,這個選項就不再是可選的了,而是必須輸入

上面使用可選參數的時候,必須在後面給這個參數指派。有時候我隻需要一個辨別而不需要一個确切的值,比如-h 和 --help。這個可以通過使用<code>action="store_true"</code> 來實作。

此時你帶參數運作,取到的值就是True,如果不帶參數運作,取到的值就是False

也可以使用<code>action="store_false"</code> ,則正好相反

另外也可以是指定一個常量,類似<code>action='store_const', const="Test"</code> ,那麼沒有-v 值是None,有-v 的值就是"Test" ,此時-v後面不能跟值了,如果有則會被當做是位置參數處理。

預設的設定是 <code>action="store'"</code> 存儲參數值。

上面的關鍵參數action是參數值賦予的方式,除了上面的用法,還可以設定為下面的值,一般用的不多

如果是 'count' 表示将參數出現的次數作為參數的值

如果是 'append' 表示将每次出現的該參數後的值都存入同一個數組再指派

分别使用下面的指令執行測試效果

上面的例子中每次列印的都是我們設定過的對象,可以使用内置函數,将參數和值轉化為字典的形式 <code>print(vars(args))</code> 。

雖然一般都是用在調用程式的時候指定一些參數,但是在程式内部也可以調用的。應該沒什麼用

大概就是上面這些了,類型Linux指令行那樣的指令應該都可以友善的寫出來了,而且還自動添加help。就整理這些吧,常用的應該都有了,如果還不夠用那就再查吧。最後使用的時候記得寫到函數裡: