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

歡迎訪問 生活随笔!

生活随笔

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

python

python argparse理解与实例

發布時間:2025/3/20 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python argparse理解与实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

argparse包的一個作用是我們可以通過命令行來更改程序中的參數,就是說可以在不修改程序的情況下更改一些需要調整的參數。下面舉一個例子。

實例

假設我們寫了一個求圓柱體體積的程序:

import mathdef cylinder_volume(redius, height):vol = math.pi * (redius**2) * heightreturn volif __name__ == '__main__':print(cylinder_volume(2, 4))

程序文件命名為parse_demo.py,用命令行運行這個程序:

我們計算得到半徑為2、高為4的圓柱體體積,但如果我們想計算半徑為3、高為5圓柱體的體積,我們不得不回到程序中去修改參數。但如果使用了argparse包,我們可以直接在命令行界面修改參數。程序如下(程序中的一些函數參數我們將在后文介紹)。

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import math import argparseparser = argparse.ArgumentParser(description='Calculate a volume of a cylinder') # 創建一個解析對象 parser.add_argument('radius', type=int, help='Radius of Cylinder') # 向該對象中添加你要關注的命令行參數和選項 parser.add_argument('height', type=int, help='Height of Cylinder') args = parser.parse_args() # 對變量進行解析,從指定的選項中返回一些數據。變量與相應的數據組成字典的items,存到args字典中def cylinder_volume(redius, height):vol = math.pi * (redius**2) * heightreturn volif __name__ == '__main__':print(cylinder_volume(args.radius, args.height))

用命令行運行這個程序:

我們在python argparse_demo.py后面加了兩個數字,第一個數字會被傳給radius參數,第二個數字會被傳給height參數,因為我們默認使用的是位置參數。通過修改最后兩個數字,我們可以很輕松的修改radius和height,計算得到相應的圓柱體體積。

argparse.ArgumentParser()方法參數,一般我們只選擇用description

  • description - 命令行幫助的開始文字,大部分情況下,我們只會用到這個參數
  • epilog - 命令行幫助的結尾文字
  • prog - (default: sys.argv[0])程序的名字,一般不需要修改,另外,如果你需要在help中使用到程序的名字,可以使用%(prog)s
  • prefix_chars - 命令的前綴,默認是-,例如-f/–file。有些程序可能希望支持/f這樣的選項,可以使用prefix_chars=”/”
  • fromfile_prefix_chars - (default: None)如果你希望命令行參數可以從文件中讀取,就可能用到。例如,如果fromfile_prefix_chars=’@’,命令行參數中有一個為”@args.txt”,args.txt的內容會作為命令行參數
  • add_help - 是否增加-h/-help選項 (default: True),一般help信息都是必須的,所以不用設置。
  • parents - 類型是list,如果這個parser的一些選項跟其他某些parser的選項一樣,可以用parents來實現繼承,例如parents=[parent_parser]
  • 三個允許的值:
  • # class argparse.RawDescriptionHelpFormatter 直接輸出description和epilog的原始形式(不進行自動換行和消除空白的操作) # class argparse.RawTextHelpFormatter 直接輸出description和epilog以及add_argument中的help字符串的原始形式(不進行自動換行和消除空白的操作) # class argparse.ArgumentDefaultsHelpFormatter 在每個選項的幫助信息后面輸出他們對應的缺省值,如果有設置的話。這個最常用吧!
  • argument_default - (default: None)設置一個全局的選項的缺省值,一般每個選項單獨設置,所以這個參數用得少,不細說
  • usage - (default: generated)如果你需要修改usage的信息(usage: PROG [-h] [–foo [FOO]] bar [bar …]),那么可以修改這個,一般不要修改。
  • conflict_handler - 不建議使用。這個在極端情況下才會用到,主要是定義兩個add_argument中添加的選項的名字發生沖突時怎么處理,默認處理是拋出異常。
  • add_argument()方法參數

  • name or flags - 指定參數的形式,想寫幾個寫幾個,不過我們一般就寫兩個,一個短參數,一個長參數,例如”–r”, “–radius”
  • 可選的選項,位置不固定,想怎么寫就怎么寫,默認是可選的 # parser.add_argument(“-f”, “–file”, help=”test test test”)
  • 位置固定的選項,例如”prog i_am_bar”,這樣子的話,i_am_bar就是bar選項的值啦,默認是必須有的 # parser.add_argument(“bar”, help=”test test test”)
  • nargs - 指定這個參數后面的value有多少個,例如,我們希望使用-n 1 2 3 4,來設置n的值為[1, 2, 3, 4] #parser.add_argument(“-n”, “–num”, nargs=”+”, type=int) # 這里nargs=”+”表示,如果你指定了-n選項,那么-n后面至少要跟一個參數,+表示至少一個,?表示一個或0個,0個或多個 。
  • default - 如果命令行沒有出現這個選項,那么使用default指定的默認值 #parser.add_argument(“+g”, “++gold”, help=”test test test”,default=”test_gold”)#需要prefix_chars包含”+” 。
  • type - 如果希望傳進來的參數是指定的類型(例如 float, int or file等可以從字符串轉化過來的類型),可以使用 #parser.add_argument(“-x”, type=int) 。
  • choices - 設置參數值的范圍,如果choices中的類型不是字符串,記得指定type哦 #parser.add_argument(“-y”, choices=[‘a’, ‘b’, ‘d’])
  • required - 如果required=True那么參數就是必須提供的了。默認為False.
  • metavar - 參數的名字,在顯示幫助信息時才用到. # parser.add_argument(“-o”, metavar=”OOOOOO”)
  • help - 設置這個選項的幫助信息
  • dest - 設置這個選項的值就是解析出來后放到哪個屬性中 #parser.add_argument(“-q”, dest=”world”)
  • args = parser.parse_args(args) # 如果你沒有args參數,那么就使用sys.argv,也就是命令行參數啦。有這個參數,就方便我們調試啊 。# args.world就是-q的值啦
  • action - The basic type of action to be taken when this argument is encountered at the command line.
  • const - A constant value required by some action and nargs selections.
  • add_argument()中使用flags參數

    對于上面實例中用到的帶argparse包的程序, 我們復制如下:

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import math import argparseparser = argparse.ArgumentParser(description='Calculate a volume of a cylinder') parser.add_argument('radius', type=int, help='Radius of Cylinder') parser.add_argument('height', type=int, help='Height of Cylinder') args = parser.parse_args() def cylinder_volume(redius, height):vol = math.pi * (redius**2) * heightreturn volif __name__ == '__main__':print(cylinder_volume(args.radius, args.height))

    命令行運行:

    可以看到出來-h之外,其他的參數都是位置參數。

    下面我們對程序的第5,6行以及最后一行進行修改:

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import math import argparseparser = argparse.ArgumentParser(description='Calculate a volume of a cylinder') parser.add_argument('--r', '--radius', type=int, help='Radius of Cylinder') parser.add_argument('--H', '--height', type=int, help='Height of Cylinder') # 不要用--h,因為--h已經被占用了 args = parser.parse_args()def cylinder_volume(redius, height):vol = math.pi * (redius**2) * heightreturn volif __name__ == '__main__':print(cylinder_volume(args.r, args.H))

    命令行運行:

    可以看到,參數都變為optional參數了。

    命令行運行:

    這時–H和–r的位置可以隨意安排了。

    互斥參數:mutually exclusive arguments

    我們可以在程序中創建一個互斥組,argparse 將會確保互斥組中只有一個參數在命令行中可用。

    ''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import math import argparseparser = argparse.ArgumentParser(description='Calculate a volume of a cylinder') parser.add_argument('--r', '--radius', type=int, help='Radius of Cylinder') parser.add_argument('--H', '--height', type=int, help='Height of Cylinder') group = parser.add_mutually_exclusive_group() # 創建一個互斥組,argparse 將會確保互斥組中只有一個參數在命令行中可用 group.add_argument('--q', '--quiet', action='store_true', help='print quiet') # action='store_true'意味著當我們在命令行給了該參數時,# 該參數但是為True,沒給該參數時,它為False group.add_argument('--v', '--verbose', action='store_true', help='print verbose') args = parser.parse_args()def cylinder_volume(redius, height):vol = math.pi * (redius**2) * heightreturn volif __name__ == '__main__':volume = cylinder_volume(args.r, args.H)if args.q:print(volume)elif args.v:print('Volume of a Cylinder with radius {} and height {} is {:.3f}'.format(args.r, args.H, volume))else:print('Volume of Cylinder {}'.format(volume))

    程序中,我們創建了一個互斥參數組,包含’–q’和’–v’,我們只需給其中一個,也可以一個都不給:

    需注意的是,add_mutually_exclusive_group()方法也接受一個 required 參數,表示在互斥組中至少有一個參數是需要的,但互斥參數組目前不支持持 add_argument_group() 的 title 和 description 參數。

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的python argparse理解与实例的全部內容,希望文章能夠幫你解決所遇到的問題。

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