python?argparse模塊傳參用法實(shí)例
前言
argsparse是python的命令行解析的標(biāo)準(zhǔn)模塊,內(nèi)置于python,不需要安裝。這個(gè)庫可以讓我們直接在命令行中就可以向程序中傳入?yún)?shù)并讓程序運(yùn)行。
港真的,今天是我第一次學(xué)習(xí)argsparse。因?yàn)橛貌坏?,自然也就沒有學(xué)習(xí)的動(dòng)力。但是現(xiàn)在電腦有點(diǎn)卡,每次打開pycharm太卡了,逼得我不得不開始使用命令行來測(cè)試代碼。
傳入一個(gè)參數(shù)
我們先在桌面新建“arg學(xué)習(xí)”的文件夾,在該文件夾中新建demo.py文件,來看一個(gè)最簡(jiǎn)單的argsparse庫的使用的例子。
import argparse
parser = argparse.ArgumentParser(description='命令行中傳入一個(gè)數(shù)字')
#type是要傳入的參數(shù)的數(shù)據(jù)類型 help是該參數(shù)的提示信息
parser.add_argument('integers', type=str, help='傳入的數(shù)字')
args = parser.parse_args()
#獲得傳入的參數(shù)
print(args)在這個(gè)代碼中,我們?cè)诿钚袀魅胍粋€(gè)數(shù)字。使用方法是打開命令行,先將工作目錄cd到arg學(xué)習(xí)
cd desktop/arg學(xué)習(xí)
然后再命令行中輸入python demo.py -h或者python demo.py --help, 這里我輸入的是
python demo.py -h
在命令行中看到demo.py的運(yùn)行結(jié)果如下
usage: demo.py [-h] integers 命令行中傳入數(shù)字 positional arguments: integers 傳入的數(shù)字 optional arguments: -h, --help show this help message and exit
現(xiàn)在我們?cè)诿钚兄薪odemo.py 傳入一個(gè)參數(shù)5,
python demo.py 5
運(yùn)行,得到的運(yùn)行結(jié)果是
Namespace(integers='5')
操作args字典
其實(shí)得到的這個(gè)結(jié)果Namespace(integers='5')是一種類似于python字典的數(shù)據(jù)類型。
我們可以使用 arg.參數(shù)名來提取這個(gè)參數(shù)
import argparse
parser = argparse.ArgumentParser(description='命令行中傳入一個(gè)數(shù)字')
#type是要傳入的參數(shù)的數(shù)據(jù)類型 help是該參數(shù)的提示信息
parser.add_argument('integers', type=str, help='傳入的數(shù)字')
args = parser.parse_args()
#獲得integers參數(shù)
print(args.integers)在命令行中運(yùn)行 python demo.py 5 , 運(yùn)行結(jié)果為
5
傳入多個(gè)參數(shù)
現(xiàn)在在命令行中給demo.py 傳入多個(gè)參數(shù),例如傳入1,2,3,4四個(gè)數(shù)字
python demo.py 1 2 3 4
運(yùn)行報(bào)錯(cuò)
usage: demo.py [-h] integers demo.py: error: unrecognized arguments: 2 3 4
不能識(shí)別2 3 4,看源代碼我們知道integers這個(gè)參數(shù)是位置參數(shù),說明第一個(gè)數(shù)1是能識(shí)別。這里我們需要重新更改demo.py代碼
import argparse
parser = argparse.ArgumentParser(description='命令行中傳入一個(gè)數(shù)字')
parser.add_argument('integers', type=str, nargs='+',help='傳入的數(shù)字')
args = parser.parse_args()
print(args.integers)nargs是用來說明傳入的參數(shù)個(gè)數(shù),'+' 表示傳入至少一個(gè)參數(shù)。這時(shí)候再重新在命令行中運(yùn)行python demo.py 1 2 3 4得到
['1', '2', '3', '4']
改變數(shù)據(jù)類型
add_argument中有type參數(shù)可以設(shè)置傳入?yún)?shù)的數(shù)據(jù)類型。我們看到代碼中有type這個(gè)關(guān)鍵詞,該關(guān)鍵詞可以傳入list, str, tuple, set, dict等。例如我們把上面的type=str,改成type=int,這時(shí)候我們就可以進(jìn)行四則運(yùn)算。
import argparse
parser = argparse.ArgumentParser(description='命令行中傳入一個(gè)數(shù)字')
parser.add_argument('integers', type=int, nargs='+',help='傳入的數(shù)字')
args = parser.parse_args()
#對(duì)傳入的數(shù)據(jù)進(jìn)行加總
print(sum(args.integers)在命令行中輸入 python demo.py 1 2 3 4, 運(yùn)行結(jié)果為
10
位置參數(shù)
在命令行中傳入?yún)?shù)時(shí)候,傳入的參數(shù)的先后順序不同,運(yùn)行結(jié)果往往會(huì)不同,這是因?yàn)椴捎昧宋恢脜?shù),例如
import argparse
parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('param1', type=str,help='姓')
parser.add_argument('param2', type=str,help='名')
args = parser.parse_args()
#打印姓名
print(args.param1+args.param2)在命令行中分別輸入python demo.py 張 三和python demo.py 三 張,得到的 運(yùn)行結(jié)果分別為
張三
和
三張
如果我們將代碼
parser.add_argument('param1', type=str,help='姓')
和
parser.add_argument('param2', type=str,help='名')互
換位置,即第4行和第五行代碼,再重新運(yùn)行
python demo.py 張 三 和 python demo.py 三 張,得到的 運(yùn)行結(jié)果分別為
三張
和
張三
可選參數(shù)
為了在命令行中避免上述位置參數(shù)的bug(容易忘了順序),可以使用可選參數(shù),這個(gè)有點(diǎn)像關(guān)鍵詞傳參,但是需要在關(guān)鍵詞前面加--,例如
import argparse
parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str,help='姓')
parser.add_argument('--name', type=str,help='名')
args = parser.parse_args()
#打印姓名
print(args.family+args.name)在命令行中輸入
python demo.py --family=張 --name=三
運(yùn)行結(jié)果
張三
可選參數(shù)雖然寫法比較繁瑣,但是增加了命令行中的可讀性,不容易因?yàn)閰?shù)傳入順序?qū)е聰?shù)據(jù)錯(cuò)亂。
默認(rèn)值
add_argument中有一個(gè)default參數(shù)。有的時(shí)候需要對(duì)某個(gè)參數(shù)設(shè)置默認(rèn)值,即如果命令行中沒有傳入該參數(shù)的值,程序使用默認(rèn)值。如果命令行傳入該參數(shù),則程序使用傳入的值。具體請(qǐng)看下面的例子
import argparse
parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, default='張',help='姓')
parser.add_argument('--name', type=str, default='三', help='名')
args = parser.parse_args()
#打印姓名
print(args.family+args.name)在命令行中分別輸入 python demo.py 、 python demo.py --family=李
運(yùn)行結(jié)果分別為
張三
和
李三
必需參數(shù)
add_argument有一個(gè)required參數(shù)可以設(shè)置該參數(shù)是否必需。
import argparse
parser = argparse.ArgumentParser(description='姓名')
parser.add_argument('--family', type=str, help='姓')
parser.add_argument('--name', type=str, required=True, default='', help='名')
args = parser.parse_args()
#打印姓名
print(args.family+args.name)在命令行中輸入 python demo.py --family=張,運(yùn)行結(jié)果
usage: demo.py [-h] [--family FAMILY] --name NAME demo.py: error: the following arguments are required: --name
因?yàn)榭蛇x參數(shù)name的required=True,所以必須要傳入。如果我們將其更改為False,程序運(yùn)行結(jié)果
張
以上就是python argparse模塊傳參用法實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于python argparse模塊傳參的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Pycharm報(bào)錯(cuò)Environment?location?directory?is?not?empty問題及
這篇文章主要介紹了Pycharm報(bào)錯(cuò)Environment?location?directory?is?not?empty問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09
Python實(shí)現(xiàn) 版本號(hào)對(duì)比功能的實(shí)例代碼
這篇文章主要介紹了 Python實(shí)現(xiàn) 版本號(hào)對(duì)比功能的實(shí)例代碼,文末給大家補(bǔ)充介紹了python 比較兩個(gè)版本號(hào)大小 ,需要的朋友可以參考下2019-04-04
python使用pandas從minio讀取excel文件方式
從MinIO讀取Excel文件并使用Pandas處理的步驟:首先使用MinIOPythonSDK下載文件,然后使用Pandas讀取,總結(jié):安裝依賴需使用Pandas和MinIOPythonSDK2024-11-11
python下os模塊強(qiáng)大的重命名方法renames詳解
這篇文章主要介紹了python下os模塊強(qiáng)大的重命名方法renames詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
Python機(jī)器學(xué)習(xí)應(yīng)用之支持向量機(jī)的分類預(yù)測(cè)篇
最近完成的一個(gè)項(xiàng)目用到了SVM,之前也一直有聽說支持向量機(jī),知道它是機(jī)器學(xué)習(xí)中一種非常厲害的算法。利用將近一個(gè)星期的時(shí)間學(xué)習(xí)了一下支持向量機(jī),把原理推了一遍,感覺支持向量機(jī)確實(shí)挺厲害的,這篇文章帶你了解它2022-01-01
pyecharts如何實(shí)現(xiàn)顯示數(shù)據(jù)為百分比的柱狀圖
這篇文章主要介紹了pyecharts如何實(shí)現(xiàn)顯示數(shù)據(jù)為百分比的柱狀圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11

