<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
argparse 是 python 自帶的命令列引數解析包,可以用來方便的服務命令列引數,使用之前需要先匯入包 import argparse
簡單使用,建立一個名為test.py的檔案
# 匯入 argparse 模組 import argparse # 建立一個argparse 的物件 parser = argparse.ArgumentParser() # 新增一個接收引數,預設值為Se7eN parser.add_argument("-n", "--name", default="Se7eN") # 獲取對應的引數的值 args = parser.parse_args() # 控制檯列印出來接收到的值 print("args = {}".format(args))
列印結果為:
houlei@houleideMacBook-Pro argparse_demo % python3 test.py # 此時在test.py後面沒有跟上引數, args = Namespace(name='Se7eN') # 所以列印出來的name為預設值 Se7eN
再次驗證:
houlei@houleideMacBook-Pro argparse_demo % python3 test.py -n HOU # 此時後面跟上了 -n 引數,並且賦值HOU args = Namespace(name='HOU') # 列印出來 name 的值為 HOU houlei@houleideMacBook-Pro argparse_demo % python3 test.py --name hou # 此時後面跟上了 --name 引數,並賦值為hou args = Namespace(name='hou') # 列印出來的 name 的值為 hou houlei@houleideMacBook-Pro argparse_demo %
解釋說明
在上述程式碼 parser.add_argument("-n", "--name", default="Se7eN") 中,有兩個引數 “-n”和“--name” 分別代表什麼?其中-n 和 --name 都是我們自己自定的引數名。至於n和name ,你可以隨便起個變數名都可以,但是要注意,前面的一個 “-”和“--”才是關鍵。
一個“-”的引數,例如:-n, 他其實相當於我們在liunx中使用的指令,一個自定義的指令。
兩個“--”的引數,例如:--name 他就相當於在程式中,用來接收對對應指令值的變數,例如我們在控制檯上輸入 python3 test.py -n hou。 其中 -n 就代表使用的 -n 的指令,然後將後面的 hou 的值賦值給對應的變數, -n 對應的變數就是 --name 。所以我們使用print 列印的時候才顯示的name = hou
簡單理解:一個“-”的是指令,兩個“--”的是接收指令內容的變數。
ArgumentParse是解析器物件,在建立一個解析器物件的時候,是有很多引數可以設定,下面就演示一下這些引數的使用
1、prog: 程式的名稱(預設值:sys.argv[0])
# 匯入 argparse 模組 import argparse # 建立一個argparse 的物件 parser = argparse.ArgumentParser() # 新增一個接收引數,預設值為Se7eN parser.add_argument("-n", "--name", default="Se7eN") # 獲取對應的引數的值 args = parser.parse_args() # 控制檯列印出來接收到的值 print("args = {}".format(args))
執行程式碼:
修改程式碼繼續演示
# 匯入 argparse 模組 import argparse # 建立一個argparse 的物件 parser = argparse.ArgumentParser(prog="testname") # 注意這裡新增了prog=testname # 新增一個接收引數,預設值為Se7eN parser.add_argument("-n", "--name", default="Se7eN") # 獲取對應的引數的值 args = parser.parse_args() # 控制檯列印出來接收到的值 print("args = {}".format(args))
2、usage: 用來描述該程式的用途,並且會覆蓋原來的prog的顯示
修改部分程式:
# 建立一個argparse 的物件 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組")
展示結果
3、description:幫助檔案的描述和uasge功能類似,只是顯示的位置不一樣
繼續修改部分程式碼:
# 建立一個argparse 的物件 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似")
展示結果
4、epilog:幫助檔案的額外說明,位置在最下面
繼續修改部分程式碼:
# 建立一個argparse 的物件 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明")
展示結果:
5、自定義指令的字首
預設是"-" 和 "--",這裡如果你不喜歡使用,也可以自通過該引數自己指定字首,個人覺得沒必要。
程式碼演示:
# 匯入 argparse 模組 import argparse # 建立一個argparse 的物件 ,並通過prefix_chars 指定指令的字首為 '+' parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明", prefix_chars='+') # 新增一個接收引數,預設值為Se7eN,這裡的指令只能使用+ 表示,否則會報錯 parser.add_argument("+n", "++name", default="Se7eN") # 獲取對應的引數的值 args = parser.parse_args() # 控制檯列印出來接收到的值 print("args = {}".format(args))
執行結果
1、action: 的作用比較多,有儲存布林型別,常數型別,陣列型別的引數的功能
注意1:使用action = store_true/store_false 時修飾的指令是不能賦值的,其對應的指令的值是布林型別的
注意2:使用action = store_const 時修飾的指令的是不能賦值,其對應的指令的值常數型別
注意3:使用action = append 是可以複製,其對應的值會將該指令對應的值放在一個陣列中
1.1 先來演示
使用action,儲存布林型別的指令的值:store_true/store_false:儲存布林型別的變數:
# 匯入 argparse 模組 import argparse # 建立一個argparse 的物件 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明") # 新增一個接收引數 -n,action = store_true 表示,<strong>在使用的時候,如果填寫了該指令,那麼該指令對應的值就是true,如果沒有使用該指令,則為空</strong> parser.add_argument("-n", "--name", action='store_true') # 獲取對應的引數的值 args = parser.parse_args() # 控制檯列印出來接收到的值 print("args = {}".format(args))
執行結果:
1.2、使用action設定常數指令
修改程式碼演示:
# 新增一個接收引數 -n,action = store_const 表示,在使用的時候,如果填寫了該指令,那麼該指就等於10 如果沒寫就等於空 parser.add_argument("-n", "--name", action='store_const',const=10)
執行結果:
1.3、使用action設定陣列型別的指令
修改程式碼演示:
# 新增一個接收引數 -n,action = append, 會把該指令的值放在陣列中 parser.add_argument("-n", "--name", action='append')
執行結果
2、nargs引數:表示該指令接收值的個數
範例1:
import argparse # 建立一個argparse 的物件 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明") # 新增一個接收引數 -n, 並且該引數還必須要接收2個值,會放在一個陣列中,其中nargs等於幾,就表示要接受幾個引數 parser.add_argument("-n", "--name", nargs=2) # 獲取對應的引數的值 args = parser.parse_args() # 控制檯列印出來接收到的值 print("args = {}".format(args))
執行結果:
範例2:
# 匯入 argparse 模組 import argparse # 建立一個argparse 的物件 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明") # 新增一個接收引數 -n, # nargs = "?" : 表示只接收1個引數,正規表示式的寫法 # nargs = "+" : 表示接收1一個或多個引數 # nargs = "*" : 表示接收0個或者多個引數 parser.add_argument("-n", "--name", nargs="*") # 獲取對應的引數的值 args = parser.parse_args() # 控制檯列印出來接收到的值 print("args = {}".format(args))
列印結果就不演示了
3、required 該指令是必須的
# 匯入 argparse 模組 import argparse # 建立一個argparse 的物件 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明") # 新增一個接收引數 -n, # nargs = "?" : 表示只接收1個引數,正規表示式的寫法 # nargs = "+" : 表示接收1一個或多個引數 # nargs = "*" : 表示接收0個或者多個引數 parser.add_argument("-n", "--name", nargs="*", required=True) # 獲取對應的引數的值 args = parser.parse_args() # 控制檯列印出來接收到的值 print("args = {}".format(args))
演示結果:
4、choices:如有choices選項,則該指令的值只能是choices中的一個
程式碼演示
# 匯入 argparse 模組 import argparse # 建立一個argparse 的物件 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明") # 新增一個接收引數 -n, # nargs = "?" : 表示只接收1個引數,正規表示式的寫法 # nargs = "+" : 表示接收1一個或多個引數 # nargs = "*" : 表示接收0個或者多個引數 parser.add_argument("-n", "--name", nargs="*", required=True, choices=['zhangsan', 'lisi']) # 獲取對應的引數的值 args = parser.parse_args() # 控制檯列印出來接收到的值 print("args = {}".format(args))
執行結果:
vars()方法可以將parser物件變成字典,方便使用
程式碼演示
# 匯入 argparse 模組 import argparse # 建立一個argparse 的物件 parser = argparse.ArgumentParser(prog="testname", usage="這是功能描述模組", description="這是程式的介紹,和usage的功能模組描述類似", epilog="額外說明") # 新增一個接收引數 -n, # nargs = "?" : 表示只接收1個引數,正規表示式的寫法 # nargs = "+" : 表示接收1一個或多個引數 # nargs = "*" : 表示接收0個或者多個引數 parser.add_argument("-n", "--name", nargs="*", required=True, choices=['zhangsan', 'lisi']) # 獲取對應的引數的值 args = parser.parse_args() # 控制檯列印出來接收到的值 print("args = {}".format(args)) # 將parser 變成字典物件 print('arg_vars = {}'.format(vars(args)))
輸出結果:
以上就是Python命令列引數解析包argparse的使用詳解的詳細內容,更多關於Python argparse的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45