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 argparse_demo.py后面加了兩個數字,第一個數字會被傳給radius參數,第二個數字會被傳給height參數,因為我們默認使用的是位置參數。通過修改最后兩個數字,我們可以很輕松的修改radius和height,計算得到相應的圓柱體體積。
argparse.ArgumentParser()方法參數,一般我們只選擇用description
add_argument()方法參數
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 參數。
總結
以上是生活随笔為你收集整理的python argparse理解与实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python手动实现kmeans聚类和调
- 下一篇: Python函数定义和函数调用