首頁>技術>

背景

最近一直訓練模型,進行模型調參比較,但是隨著模型引數多起來了,想獲得不同引數模型結果也越來越麻煩。看看前輩以及github上開源專案的程式碼後,感覺這個感覺學到了很多。讓你的python程式輸入引數更像Linux那樣輸入,之前使用sys.argv,看到這個之後感覺太low了。這個就是 Python 標準庫的一部分:Argparse[1]。那麼下面讓我們看看他是多麼方便。

1 入門操作

由於這個包是Python標準庫中的一部分,所以就不用安裝了,直接使用即可。下面結合文章argparse基本用法[2]和自己的理解書寫如下程式:

import argparsedef main():    parser = argparse.ArgumentParser(description="argparse使用-小試牛刀")    parser.add_argument('-n', '--name', default="juzipi")    parser.add_argument("-j", '--job', default="程式設計師")    args = parser.parse_args()    print(args)    name = args.name    job = args.job    print("Hello, 大家好,我是 {} {}!".format(job, name))if __name__ == '__main__':    main()

執行方式:linux系統使用比較多的還是命令,這裡我也在終端裡執行程式,如下是使用預設引數執行:

無引數執行

有參執行如下:

有參執行

看起來是不是挺有意思的。在上面的程式碼中,使用argparse.ArgumentParser構建一個引數解析器,其實也就是建立一個相關物件,description描述了這個解析器,在命令列中使用-h(--help)命令就可以看到,如下:

幫助文件

是不是很清晰。

使用這個引數解析器得有一些我們需要的引數,那麼就使用parser.add_argument()方法去定義一些。上面的例子就是增加了兩個引數:name, job。其中'-n'、'--name'都表示一個引數,而default是執行程式時不輸入對應引數值所啟用的值。現在相信你對這個有一定的瞭解了。下面我們再深入一下。

2.1 required:表示這個引數是否一定需要設定

如果設定了required=True,則在實際執行的時候不設定該引數將報錯,在上面的程式上新增如下程式碼:

parser.add_argument('-ne', '--need', required=True)

當不輸入值時,則有:

必要引數

2.2 type: 引數型別

命令引數是傳給其他功能模型使用,不同的功能模型則需要不同型別的資料輸入,可以透過設定type直接將輸入的資料轉換成對應型別的資料(前提輸入的資料格式就滿足轉換要求),修改need引數的程式碼如下:

parser.add_argument('-ne', '--need', required=True, type=int)

執行檢視:

指定引數型別

2.3 choices:引數值只能從幾個選項裡面選擇

有時為了更加人性化提示使用者使用,可以提升使用者輸入哪些值,慢慢地感覺到了Linux的味道了。現在我們修改need引數的程式碼如下:

parser.add_argument('-ne', '--need', required=True, type=int, choices=[100, 200])

使用-h命令檢視修改後的樣子:

幫助命令

可以看到,need引數的選擇項。具體效果,朋友們可以自行試試,這裡不費篇幅展示了,以下是輸入選擇範圍外的結果。

選擇範圍外結果

2.4 dest:修改程式內部獲取值方法

在命令列中輸入的命令是-ne等形式把引數傳入到程式,程式可透過其他屬性獲取對應引數值,就是dest,修改need引數如下:

parser.add_argument('-ne', '--need', required=True, type=int, choices=[100, 200], dest="need_real")

執行:

獲取真實值

上面還修改列印語句為:

print("need引數的型別:{},值為:{}".format(type(args.need_real), args.need_real))
3 總結

argparse是一個全面的引數處理庫,功能比較強大,內容也比較多,暫時就介紹這麼多吧。更多實際需要的功能,我們就根據需要檢視官方文件以及網上的其他資料吧。

參考資料

[1] Argparse: https://docs.python.org/zh-cn/3.7/howto/argparse.html

[2] argparse基本用法: https://blog.csdn.net/yy_diego/article/details/82851661

[3] argparse簡要用法總結: http://vra.github.io/2017/12/02/argparse-usage/

17
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Python圖表繪製進階,圖例和標題你真的會新增嗎?一文講透