当你需要优化参数传入使用时,请看看这个工具
需要用的理由
- 我们很多时候在传入参数时,需要传入类似经纬度范围,文件名,地址的参数,但是这些参数依赖传入参数的位置,不能被灵活地调用,改写,传统利用
sys.argv[]的方法不能很好地解决该痛点。 - 当我们需要经常修改函数的函数,但又不想每次打开其他Python来修改传入的参数时,可以由命令行参数由人在终端中传入,而
argparse负责把终端里的文字转换成Python程序能够方便使用的数据。
argparse的方法
传入参数
例如我们需要将所需要的经纬度传入代码中,我们可以写:
1 | import argparse |
在运行时,我们需要传入lat和lon参数时,运行:
1 | python site.py --lat 60 --lon 120 |
注意,在程序执行结束后,这两个值通常就消失了,再次运行python site.py时,程序不会记得lat和lon,因为argparse只负责“接受参数”,并不负责“永久保存数据”。另外,需要知道的是,required=True代表该参数是必填参数,意味着该参数必须要在命令行中指明才能运行,非否则如果该参数不是必填参数,可以不写required=Ture,也可以不用在命令中交代该参数,该参数在运行时是None。
这样的好处是,当我们需要团队合作修改代码时,我们每个人不需要每次都打开函数文件进行修改,传入参数,而是可以直接通过阅读代码使用手册.md,来传入必要的参数来运行,十分方便。
同时运行不同参数的结果
假设我们现在有不同的区域模拟需求,而每次模拟都需要消耗大量时间,argparse就可以很好地帮我们同时运行不同的区域。例如在两个不同的终端中运行:
1 | python site.py --lat 60 --lon 120 |
自动检查数据类型
如果声明:
1 | parser.add_argument("--lat", type=float) |
而用户却输入:
1 | python site.py --lat Asia |
argparse 会自动报错,告诉用户 --lat 必须是浮点数
自动生成使用说明
运行python site.py --help就可以看到程序需要哪些参数以及如何使用,这对于交给别人使用的脚本很重要。
位置参数和关键字参数
位置参数前面不用加--,例如如果我们在代码中定义parser.add_argument("filename"),那我们在运行时就可以直接写python site.py readme.md,在readme.md前面不用再加--filename。
而在程序中如果有多个位置参数时,要注意顺序,顺序不能随意交换,因为程序依靠位置判断他们分别代表什么,而带--的参数可以调整顺序。