關(guān)于Python參數(shù)解析器argparse的應(yīng)用場(chǎng)景
一、什么是argparse
argparse 是一個(gè)用來(lái)解析命令行參數(shù)的 Python 庫(kù),它是 Python 標(biāo)準(zhǔn)庫(kù)的一部分。
argparse 模塊使編寫用戶友好的命令行界面變得容易。
程序定義了所需的參數(shù),而 argparse 將找出如何從 sys.argv 中解析這些參數(shù)。
argparse 模塊還會(huì)自動(dòng)生成幫助和使用消息,并在用戶為程序提供無(wú)效參數(shù)時(shí)發(fā)出錯(cuò)誤。
簡(jiǎn)而言之,就是匯總函數(shù)接口,方便傳參。
二、argparse的使用場(chǎng)景
在深度學(xué)習(xí)代碼中,特別是在train.py或test.py中,argparse最常被使用。
因?yàn)樵谶@些文件中,通常要對(duì)其他.py文件中定義的class或function進(jìn)行調(diào)用,因此必然要傳入大量的參數(shù),如果不對(duì)這些參數(shù)進(jìn)行集中編寫,那么在冗長(zhǎng)的代碼中去找參數(shù)的定義位置或傳參的位置將會(huì)十分麻煩。
argparse為用戶提供了集中編寫所需參數(shù)的機(jī)會(huì),下面的使用教程中我會(huì)結(jié)合簡(jiǎn)單而具體的例子進(jìn)行說(shuō)明。
三、argparse的使用流程
1.創(chuàng)建一個(gè)解析器
即創(chuàng)建 ArgumentParser() 對(duì)象
parser = argparse.ArgumentParser(description='test')
description:大多數(shù)對(duì) ArgumentParser 構(gòu)造方法的調(diào)用都會(huì)使用 description= 關(guān)鍵字參數(shù)。
這個(gè)參數(shù)簡(jiǎn)要描述這個(gè)程度做什么以及怎么做。
在幫助消息中,這個(gè)描述會(huì)顯示在命令行用法字符串和各種參數(shù)的幫助消息之間。
2.添加參數(shù)
即調(diào)用 add_argument() 方法添加參數(shù)
parser.add_argument('--binary', action='store_true', default=False, help='action=store_true表示默認(rèn)為False,當(dāng)在命令行中使用--binary時(shí)自動(dòng)變?yōu)門rue') parser.add_argument('--number', type=int, default=6, help='普通數(shù)據(jù),type可指定類型.') parser.add_argument('--epochs', type=int, default=300, help='Number of epochs to train.')
這里說(shuō)一下如何定義參數(shù)的格式,可以暫時(shí)略過(guò)不看,粗體部分為比較常用的參數(shù),其實(shí)每個(gè)都很常用:
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
各個(gè)參數(shù)解釋如下:
- name or flags:選項(xiàng)字符串的名字或者列表,例如 foo 或者 -f, --foo; action:命令行遇到參數(shù)時(shí)的動(dòng)作,默認(rèn)值是 store; store_const:表示賦值為const;
- default :不指定參數(shù)時(shí)的默認(rèn)值。
- type:命令行參數(shù)應(yīng)該被轉(zhuǎn)換成的類型;
- choices:參數(shù)可允許的值的一個(gè)容器;
- nargs :應(yīng)該讀取的命令行參數(shù)個(gè)數(shù),可以是具體的數(shù)字,或者是?號(hào),當(dāng)不指定值時(shí)對(duì)于 Positional argument 使用 default,對(duì)于 Optional argument 使用 const;或者是 * 號(hào),表示 0 或多個(gè)參數(shù);或者是 + 號(hào)表示 1 或多個(gè)參數(shù)。
- required:可選參數(shù)是否可以省略 (僅針對(duì)可選參數(shù))。
- help:參數(shù)的幫助信息,當(dāng)指定為 argparse.SUPPRESS 時(shí)表示不顯示該參數(shù)的幫助信息.
- metavar:在 usage 說(shuō)明中的參數(shù)名稱,對(duì)于必選參數(shù)默認(rèn)就是參數(shù)名稱,對(duì)于可選參數(shù)默認(rèn)是全大寫的參數(shù)名稱
- dest:解析后的參數(shù)名稱,默認(rèn)情況下,對(duì)于可選參數(shù)選取最長(zhǎng)的名稱,中劃線轉(zhuǎn)換為下劃線.
- const:action 和 nargs 所需要的常量值。
- append:將遇到的值存儲(chǔ)成列表,也就是如果參數(shù)重復(fù)則會(huì)保存多個(gè)值; append_const:將參數(shù)規(guī)范中定義的一個(gè)值保存到一個(gè)列表;
- count:存儲(chǔ)遇到的次數(shù);此外,也可以繼承 argparse.Action 自定義參數(shù)解析;
3.解析參數(shù)
即使用 parse_args() 解析添加的參數(shù)
args = parser.parse_args()
4.簡(jiǎn)單而具體的例子
例如我現(xiàn)在有一個(gè).py文件,我現(xiàn)在定義了好多好多函數(shù)(為了方便我只定義了兩個(gè)),我現(xiàn)在需要集中管理我傳入的參數(shù),使用argparse就會(huì)非常方便,對(duì)于本.py文件中的傳參一目了然。
import argparse parser = argparse.ArgumentParser(description='test') parser.add_argument('--spring', action='store_true', default=False, help='nothing.') parser.add_argument('--summer', type=int, default=6, help='num.') parser.add_argument('--fall', type=int, default=11, help='num.') parser.add_argument('--winter', type=int, default=100, help='Number of epochs to train.') args = parser.parse_args() # FLAGS, unparsed = parser.parse_known_args() 這種解析方法用的比較少,有興趣可以了解一下 def sum_function(num2sum_1,num2sum_2): sum_result = num2sum_1 + num2sum_2 return sum_result def multiply_function(num2multiply_1,num2multiply_2): multiply_result = num2multiply_1 * num2multiply_2 return multiply_result print('args.spring的值是{}'.format(args.spring)) print('args.summer的值是{}'.format(args.summer)) print(sum_function(args.summer,args.fall)) print(multiply_function(args.summer,args.winter))
# 運(yùn)行結(jié)果
args.spring的值是False
args.summer的值是6
17
600
你可以發(fā)現(xiàn),對(duì)本文件中的函數(shù)進(jìn)行傳參,無(wú)論有多少參數(shù)需要傳,我們只要在argparse中寫好需要傳的參數(shù),在傳參時(shí)傳入args.參數(shù)名,需要修改傳參值時(shí),統(tǒng)一在argparse中進(jìn)行修改即可,這樣就方便了參數(shù)的管理。
5.如何修改參數(shù)值
- 第一,對(duì)于有default的參數(shù),直接修改default的值即可;
- 第二,用命令行運(yùn)行,例如在上面舉例的程序,我如果想把summer的值改為10,fall的值改為20,那么命令行指令就是:python train.py --summer 10 --fall 20;如果我同時(shí)還想讓spring的值成為True,那么命令行指令為:python train.py --summer 10 --fall 20 --spring
運(yùn)行結(jié)果:
args.spring的值是True
args.summer的值是10
30
1000
- 第三,在Edit Configurations中進(jìn)行配置,然后run即可:
到此這篇關(guān)于關(guān)于Python參數(shù)解析器argparse的應(yīng)用場(chǎng)景的文章就介紹到這了,更多相關(guān)Python的argparse的應(yīng)用場(chǎng)景內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pytorch在NLP中的簡(jiǎn)單應(yīng)用詳解
今天小編就為大家分享一篇Pytorch在NLP中的簡(jiǎn)單應(yīng)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01Python圖像處理之gif動(dòng)態(tài)圖的解析與合成操作詳解
這篇文章主要介紹了Python圖像處理之gif動(dòng)態(tài)圖的解析與合成操作,結(jié)合實(shí)例形式分析了Python基于PIL模塊解析gif文件,以及基于imageio庫(kù)合成gif文件的相關(guān)操作技巧,需要的朋友可以參考下2018-12-12python部署chineseocr_lite的實(shí)現(xiàn)示例
本文主要介紹了python部署chineseocr_lite的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Python實(shí)現(xiàn)合并兩個(gè)有序鏈表的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)合并兩個(gè)有序鏈表的方法,涉及Python操作鏈表節(jié)點(diǎn)的遍歷、判斷、添加等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01Mac PyCharm中的.gitignore 安裝設(shè)置教程
這篇文章主要介紹了Mac PyCharm中的.gitignore 安裝設(shè)置教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04python中把元組轉(zhuǎn)換為namedtuple方法
在本篇文章里小編給大家整理的是一篇關(guān)于python中把元組轉(zhuǎn)換為namedtuple方法,有興趣的朋友們可以參考下。2020-12-12