python3 使用argparse更好的組織輸入引數

張昕博發表於2019-02-16

問題與現狀

通常情況下,我們都會使用sys.argv[n]這樣的手段來獲取python指令碼的輸入引數。這樣做的缺點如下:
1 引數輸入和獲取必須嚴格按照順序
2 在獲取引數的同時需要寫一點額外的程式碼對輸入引數進行簡單的合法性檢查
3 在輸入引數過多(通常情況下專案構建時入參很多,尤其是當各個指令碼解耦充分的情況下)導致向其他函式傳遞的引數過多,而通常一個函式的引數最好不要超過7個
4 如果該python指令碼是對外發布給別人用的,則使用者不清楚該指令碼如何使用,必須在readme文件說明,而每次檢視readme文件對使用者來說過於繁瑣。


用argparse優雅的組織輸入引數

優勢:
1 不需要安裝,直接import argparse即可
2 使用簡單,基本用法如下:

def get_args():
    parser = argparse.ArgumentParser(description="this is a calculator")  # 指令碼描述
    parser.add_argument(`--num1`, help="input num1")  # add_argument()指定程式可以接受的命令列選項
    parser.add_argument(`--num2`, help="input num2")  # add_argument()指定程式可以接受的命令列選項
    parser.add_argument(`--et`, help="excute type", choices=["+", "-"])  #choices 用於約束使用者行為
    args = parser.parse_args()
    return args

3 使用方法對使用者友好,可以通過預設的--help檢視指令碼的簡單使用方法

python argparse_test.py --help
usage: argparse_test.py [-h] [--num1 NUM1] [--num2 NUM2] [--et {+,-}]

this is a calculator

optional arguments:
  -h, --help   show this help message and exit
  --num1 NUM1  input num1
  --num2 NUM2  input num2
  --et {+,-}   excute type

4 引數傳遞簡單,只用傳遞args這個物件,並且通過.操作符就可以獲取到輸入引數,例如args.et

相關文章