【Python】让Python程序参数输入更像Linux命令——argparse

原创公众号(谢谢支持):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」,关注我的公众号(新人求支持),我会第一时间在公众号分享知识技术,根据自己的经验回答你遇到的问题。

记得关注、咱们下次再见!

微信搜一搜

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮AI记

好好学习,天天向上

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值