原创公众号(谢谢支持):AIAS编程有道
背景
最近一直训练模型,进行模型调参比较,但是随着模型参数多起来了,想获得不同参数模型结果也越来越麻烦。看看前辈以及github上开源项目的代码后,感觉这个感觉学到了很多。让你的python程序输入参数更像Linux那样输入,之前使用sys.argv,看到这个之后感觉太low了。这个就是 Python 标准库的一部分:Argparse。那么下面让我们看看他是多么方便。
1 入门操作
由于这个包是Python标准库中的一部分,所以就不用安装了,直接使用即可。下面结合文章argparse基本用法和自己的理解书写如下程序:
import argparse
def main():
parser = argparse.ArgumentParser(description="argparse使用-小试牛刀")
parser.add_argument('-n', '--name', default="juzipi")
parser.add_argument("-j", '--job', default="程序员")
args = parser.parse_args()
print(args)
name = args.name
job = args.job
print("Hello, 大家好,我是 {} {}!".format(job, name))
if __name__ == '__main__':
main()
运行方式:linux系统使用比较多的还是命令,这里我也在终端里运行程序,如下是使用默认参数运行:
有参运行如下:
看起来是不是挺有意思的。在上面的代码中,使用argparse.ArgumentParser构建一个参数解析器,其实也就是创建一个相关对象,description描述了这个解析器,在命令行中使用-h(–help)命令就可以看到,如下:
是不是很清晰。
使用这个参数解析器得有一些我们需要的参数,那么就使用parser.add_argument()方法去定义一些。上面的例子就是增加了两个参数:name, job。其中’-n’、’–name’都表示一个参数,而default是运行程序时不输入对应参数值所启用的值。现在相信你对这个有一定的了解了。下面我们再深入一下。
2 挖掘argparse更多功能
当然,上面的内容能够应付日常中一些任务。了解更多的内容,也会让我们事半功倍。下面的内容参考了argparse简要用法总结部分内容,特此感谢。主要介绍parser.add_argument()中的其他参数,default就不再介绍了。
2.1 required:表示这个参数是否一定需要设置
如果设置了required=True,则在实际运行的时候不设置该参数将报错,在上面的程序上添加如下代码:
parser.add_argument('-ne', '--need', required=True)
当不输入值时,则有:
2.2 type: 参数类型
命令参数是传给其他功能模型使用,不同的功能模型则需要不同类型的数据输入,可以通过设置type直接将输入的数据转换成对应类型的数据(前提输入的数据格式就满足转换要求),修改need参数的代码如下:
parser.add_argument('-ne', '--need', required=True, type=int)
运行查看:
2.3 choices:参数值只能从几个选项里面选择
有时为了更加人性化提示用户使用,可以提升用户输入哪些值,慢慢地感觉到了Linux的味道了。现在我们修改need参数的代码如下:
parser.add_argument('-ne', '--need', required=True, type=int, choices=[100, 200])
使用-h命令查看修改后的样子:
可以看到,need参数的选择项。具体效果,朋友们可以自行试试,这里不费篇幅展示了,以下是输入选择范围外的结果。
2.4 dest:修改程序内部获取值方法
在命令行中输入的命令是-ne等形式把参数传入到程序,程序可通过其他属性获取对应参数值,就是dest,修改need参数如下:
parser.add_argument('-ne', '--need', required=True, type=int, choices=[100, 200], dest="need_real")
运行:
上面还修改打印语句为:
print("need参数的类型:{},值为:{}".format(type(args.need_real), args.need_real))
3 总结
argparse是一个全面的参数处理库,功能比较强大,内容也比较多,暂时就介绍这么多吧。更多实际需要的功能,我们就根据需要查看官方文档以及网上的其他资料吧。
原创不易,科皮子菊我请各位友友帮帮个忙:
-
点赞支持一下, 您的肯定是我在csdn创作的源源动力。
-
微信搜索「pipizongITR」,关注我的公众号(新人求支持),我会第一时间在公众号分享知识技术,根据自己的经验回答你遇到的问题。
记得关注、咱们下次再见!