在命令行中運行python代碼是很常見的,下面介紹如何定義命令後面跟的參數。python
Python代碼中主要使用下面幾行代碼來定義並獲取須要在命令行中賦值的參數:數組
import argparse parser = argparse.ArgumentParser("Description.") # ————1———— parser.add_argument('--test1', type=str, default="1", help="Test1 help.") # ————2———— parser.add_argument('--test2', type=float, default=2.1, help="Test2 help.") # ————2———— args = parser.parse_args() # ————3———— print(args) test1, test2 = args.test1, args.test2 # ————4———— print(type(test1), test1, test1 + " add test") print(type(test2), test2, test2 + 100)
註釋:函數
一、獲取外部參數對象實例。能夠傳入字符串來描述整體的外部參數。spa
二、定義外部參數,能夠屢次調用來定義多個外部參數。函數的第一個參數是外部參數的名稱,建議以兩個減號開頭,中間不要使用數字字母下劃線之外的符號,不然容易出錯。type是你但願外部參數傳入後轉換的類型,好比--test1定義爲str,即便命令行傳參不添加引號,函數也將它轉換爲字符串(固然不加引號傳字符串就不能用空格了)。而--test2是float,即便命令行傳參帶了引號,只要能轉換爲數字,函數都能轉換爲float類型。default是外部參數的默認值。若是命令行不對外部參數賦值而使用默認值,函數不會對你定義的默認值進行type上的轉換,因此default最好直接定義爲type指定的類型(好比--test1的default定義爲"1"而不是1)。help傳入對當前外部參數的描述,命令行中使用--help輸出的就是這個。 命令行
三、獲取全部參數,得到的是一個命名空間,相似於字典,但使用屬性的方式而不是key索引來獲取命名對應的外部參數值。code
四、使用獲取屬性的方式獲取外部參數。對象
須要注意的是,外部參數的定義必須寫在獲取外部參數以前。也就是說,parser.add_argument()要寫在parser.parse_args()以前,不然外部參數沒法被命令行捕獲。另外,若是代碼中沒有parser.parse_args(),命令行就不能傳參。blog
用命令行執行以上代碼,命令與輸出以下(以上代碼保存爲test.py):索引
能夠看出,故意以數字和字符串的方式分別對字符串和float類型的外部參數賦值,函數都能正確地轉換並正確地參與運算。ip
使用默認值時輸出以下:
經過以上的實驗,argparse庫彷佛能將外部參數正確轉換爲各類類型,只要能轉換。下面來實驗是否能傳入一個numpy數組。代碼以下:
import numpy as np import argparse parser = argparse.ArgumentParser() parser.add_argument('--array', type=np.array, default=np.array([1,2])) args = parser.parse_args() print(args) array = args.array print(type(array)) print(array) print(array + 1)
當使用默認值時:
運行正確,但當咱們意圖傳入外部參數時:
儘管傳入的[1,2]被轉換爲numpy.ndarray類型,它卻並不能參與運算。因此,並非全部的類型都能在命令行中傳入的。