在命令行中运行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类型,它却并不能参与运算。因此,并非全部的类型都能在命令行中传入的。