日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python argparse nargs_Python | 使用argparse解析命令行参数

發布時間:2023/12/20 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python argparse nargs_Python | 使用argparse解析命令行参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天是Python專題第27篇文章,我們來聊聊Python當中的命令行參數工具argparse。

命令行參數工具是我們非常常用的工具,比如當我們做實驗希望調節參數的時候,如果參數都是通過硬編碼寫在代碼當中的話,我們每次修改參數都需要修改對應的代碼和邏輯顯然這不太方便。比較好的辦法就是把必要的參數設置成通過命令行傳入的形式,這樣我們只需要在運行的時候修改參數就可以了。

sys.argv

解析命令行傳入參數最簡單的辦法就是通過sys.argv,sys.argv可以獲取到我們通過命令行傳入的參數。

import?sys

print(sys.argv)

用法很簡單,只需要調用sys.argv即可。argv是一個數組,如果參數有多個,我們可以通過下標進行訪問。但是有一點需要注意,argv當中存儲的結果是從Python調用開始的。

我們來看一個例子,我們隨意傳入一些參數,print sys.argv之后是這樣的。

python?test.py?-a?-c?-d=222

>>>['test.py',?'-a',?'-c',?'-d=222']

也就是說我們python運行test.py這個文件名也當做參數之一,所以我們要獲取自定義參數的話需要從argv[1]開始。

sys.argv的好處是方便,我們只需要訪問它就可以拿到傳入的參數了。但是缺點也很明顯,就是功能太少了。假如我們是看其他大神的代碼,我們想要知道運行的時候需要傳入什么參數,以及每個參數代表什么含義就做不到了。

為了解決這個問題,我們需要使用封裝更多功能的工具,也是本篇文章的核心——argparse。

基本用法

argparse是Python當中的一個庫,我們需要先import一下,這個庫我沒記錯應該是Python自帶的,也不需要安裝,我們直接就可以使用。

在我們使用之前,我們需要先初始化這個parse,也就是一個參數解析器。

#?這里ArgumentParser可以傳入一個字符串,表示用途

parser?=?argparse.ArgumentParser()

parser.parse_args()

這個時候其實就已經有了一個解析器了,我們在運行的時候可以傳入參數-h,表示help,也就是查看目前解析器當中定義的參數。由于我們現在什么也沒有,所以能顯示出來的就只有help。

必選參數

首先我們來介紹必選參數,它的定義和函數當中的必填參數是一樣的,也就是說我們運行程序必須要的參數。如果不傳,那么程序不應該執行會進行報錯并提示。

定義必選參數的方法非常簡單,我們只需要通過add_argument傳入參數的名稱就可以了。

import?argparse

parser?=?argparse.ArgumentParser("For?test?the?parser")

parser.add_argument('test')

args?=?parser.parse_args()

print(args.test)

這樣我們就定義了一個名叫test的參數,我們可以通過args.test來訪問它。

這個時候我們再運行python test.py -h就會發現提示的信息當中多了一行:

告訴我們必選參數當中有test,必選參數直接傳入,不需要加上前綴。所以我們執行的時候直接python test.py xxx就可以了。

可選參數

有必選參數當然就有可選參數,可選參數由于可選可不選, 所以我們在使用的時候需要在參數前加上標識-或者--。比如我們參數名叫做test,可以定義成-test或者--test,這兩種都可以,也可以這兩種都定義。

parser.add_argument('-test',?'--test')

我們運行-h可以發現optional arguments當中多了test和--test。

但是這個只print出來了參數名,并沒有告訴我們這個參數究竟是做什么的,像是help參數后面就跟了show this help message and exit這個提示語。如果我們也希望help能夠提示我們參數的作用怎么辦呢?

我們可以通過help參數傳入我們希望打印出來的提示語,這樣方便使用者在使用的時候了解參數的情況。

比如我們把這行語句改成:

parser.add_argument('-test',?'--test',?help='just?for?help')

這樣當我們運行的時候,就會看到提示語了:

默認值

如果參數很多的時候,我們有時候可能不希望每一個都指定一個值,而是希望可以在不填的時候有一個默認值。這個想法非常正常,想要做到這點也很簡單,我們可以通過default參數來指定。

import?argparse

parser?=?argparse.ArgumentParser("For?test?the?parser")

parser.add_argument('-test',?'--test',?default=1,?help='just?for?help')

args?=?parser.parse_args()

print(args.test)

比如這樣我們在代碼當中把test參數的默認值設置成了1,當我們運行的時候,如果不填test這個參數的話,那么程序就會使用它的默認值也就是1。

但有一點默認值的信息并不會print在help當中,所以我們需要自己在提示語當中告知使用者默認值是多少。

type

我們可以定義參數的默認值,當然也可以定義它的類型。

因為命令行傳入的參數默認都是字符串,如果我們要進行數學上的計算,使用str還需要自己轉換,這就很不方便。我們可以在傳入參數的時候就完成類型的匹配,這樣如果傳入參數的類型不對, 那么直接報錯,不往下運行。

想要做到這點也很簡單,通過type參數就可以實現。

parser.add_argument('-test',?'--test',?default=1,?type=int,?help='just?for?help')

比如當我們定義了一個int型的參數,而傳入的是類型不匹配的話,那么就會引起報錯:

報錯信息當中寫得很清楚,我們得到了一個無效的int的值,它是abc。

可選值

它同樣還支持可選值,可選值很好理解,就是我們希望限定傳入參數的范圍僅僅在幾個值當中。比如說我們希望傳入的值不是0就是1,或者是在某幾個具體的值當中,這個時候我們可以通過choices參數來實現這一點。

choices參數傳入的是一個list,也就是我們的限定范圍,只有在這個范圍當中的值才被允許。

parser.add_argument('-test',?'--test',?default=1,?choices=[2,?3,?4],?type=int,?help='just?for?help')

如果我們運行傳入test=1,那么就會引起報錯,告訴我們傳入的值不在choices范圍當中。

這是一個挺有意思的例子,仔細看會發現我們默認值設置成了1,但是可選值當中并沒有1。這也是允許的,默認值可以不在可選值范圍內,但是當我們傳入1就會觸發可選值校驗。

action

action是一個很神奇也很有用的操作,可以指定參數的處理方式。我們默認的方式是store,也就是存儲的意思,這個我們都能理解。除此之外,還有store_true,它表示出現則是true,否則是false。

parser.add_argument('-test',?'--test',?action='store_true',?help='just?for?help')

當我們把test參數的定義改成這樣之后,我們來對比一下運行的結果就明白了。

除了store_true之外還有store_const,也就是說出現就指定為一個固定值。

parser.add_argument('-test',?'--test',?action='store_const',?const=23,?help='just?for?help')

這樣當我們指定-test參數之后,它會自動被賦值成23。

除了這兩個之外,另外一個很常用的參數是append,可以將多次出現的同一個參數自動存入一個list當中。

parser.add_argument('-test',?'--test',?action='append',?type=int,?help='just?for?help')

nargs

nargs也是一個非常有用的參數,可以對參數進行一些花式操作。nargs的傳入參數有以下幾種,首先是N,也就是一個整數。代表可以接收N個參數值,這N個值會被存入一個list當中。

parser.add_argument('-test',?'--test',?nargs=2,?type=int,?help='just?for?help')

另外一種傳入的參數是'+'或者是'*',它可以將任意多個值存入一個list當中。

parser.add_argument('-test',?'--test',?nargs='*',?type=int,?help='just?for?help')

總結

有了parser之后,我們在Python當中處理命令行參數會變得非常簡單,我們可以做各種各樣的定制化操作。除了我們上面介紹的之外,還有一些其他的做法,相對來說不是非常常用,所以就不一一窮盡了,感興趣的同學可以自行了解一下。

今天的文章到這里就結束了,如果喜歡本文的話,請來一波素質三連,給我一點支持吧(關注、轉發、點贊)。

- END -

總結

以上是生活随笔為你收集整理的python argparse nargs_Python | 使用argparse解析命令行参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆一级片| 污网站免费看 | 久久精品无码毛片 | 老妇女av | 在线观看特色大片免费网站 | 福利视频免费 | 超碰一区二区 | 综合激情网五月 | 久久久久无码国产精品不卡 | 日韩一区二区三区免费 | av网页在线 | 一区二区三区四区精品 | 在线日韩免费 | 国产尻逼| 玖玖在线免费视频 | 午夜在线精品偷拍 | 欧洲精品视频在线观看 | 久久这里只有精品久久 | 国产91丝袜在线播放九色 | 日韩精品一区二区三区在线观看 | 米奇久久 | 欧洲做受高潮欧美裸体艺术 | 精品一区二区三区无码视频 | 国产精品美女一区二区三区 | 亚洲精品99 | 亚洲一区二区三区网站 | www.国产在线 | 国产一区二区三区中文字幕 | 热热99| 国产视频aaa| 香蕉国产在线 | 91精品国产色综合久久不8 | 国产又粗又黄又爽视频 | 亚洲一区免费看 | 久久久久久av无码免费网站下载 | 中文字幕视频一区 | 国产精品无码人妻一区二区在线 | 一级影片在线观看 | 首尔之春在线看 | 久久与婷婷| 亚洲字幕 | 黄色片网站在线播放 | 制服诱惑一区二区 | 欧美做爰猛烈床戏大尺度 | 国产无码精品在线播放 | 污的视频在线观看 | 久久av导航 | 亚洲自拍偷拍色图 | 96国产在线 | 日本高清不卡在线观看 | 欧洲熟妇的性久久久久久 | 青娱乐国产在线视频 | 善良的女邻居在线观看 | 亚洲AV无码久久精品浪潮 | 四虎黄色 | 日韩精品无码一本二本三本色 | 奇米影视77777| 色射网 | 又黄又爽的视频 | 亚洲第一黄色网 | 久久黄色免费视频 | 深爱婷婷网 | 黄污视频在线播放 | 麻豆视频免费在线 | 亚洲成肉网 | 午夜激情视频在线播放 | 国产精品手机在线观看 | 6—12呦国产精品 | 欧美精品一级片 | 91精品人妻一区二区三区蜜桃2 | 亚洲23p | av波多野吉衣 | 日韩三级免费看 | 在线一区二区观看 | 国产成人无码一区二区在线观看 | 一区二区在线 | 黄色电影在线视频 | 欧美偷拍亚洲 | 三级黄色片网站 | 无码精品人妻一区二区三区漫画 | 一区二区三区四区五区在线视频 | 人妻少妇一区二区三区 | 国产区91| 成人h动漫精品一区二区器材 | 欧美日韩在线免费 | 国产性生活 | 亚洲精品久久 | 国产一区免费看 | 欧美69影院 | 东凛在线观看 | 国产性生活毛片 | 性感美女在线 | 成人福利视频在线观看 | 国产精品1 | 成人日韩视频 | 激情久久综合 | 亚洲一区二区三区在线 | 黄色av免费在线观看 | 小柔的裸露日记h |