美文网首页
20.11.10 python函数参数与argparse命令行解

20.11.10 python函数参数与argparse命令行解

作者: mpcv | 来源:发表于2020-11-10 21:12 被阅读0次

Pyhton函数参数

python总共有4中参数类型:定位参数(positional argument, 也有叫必选参数、位置参数的)、默认参数可变参数关键字参数

定位参数

定位参数很简单,就是函数中必须接受的参数。
定位参数不能省略,且传参时要严格遵照次序

例:

def sum(a, b):
  return a+b
print(sum(1,2)
# > 3

这里的a,b就是必选参数。

默认参数

默认参数,就是给必选参数加了一个默认值,我们在传递时,可省略对该参数的传值操作。

在写python程序的时候,尤其是用深度学习框架pytorch/tensorflow/MxNet等训练神经网络的时候,经常会看到类似下面的代码:

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--epoch', type=int,
                        default=20, help='epoch number')
    parser.add_argument('--lr', type=float,
                        default=1e-4, help='learning rate')
    parser.add_argument('--batchsize', type=int,
                        default=16, help='training batch size')
    parser.add_argument('--trainsize', type=int,
                        default=352, help='training dataset size')
    parser.add_argument('--clip', type=float,
                        default=0.5, help='gradient clipping margin')
    parser.add_argument('--decay_rate', type=float,
                        default=0.1, help='decay rate of learning rate')
    parser.add_argument('--decay_epoch', type=int,
                        default=50, help='every n epochs decay learning rate')
    parser.add_argument('--train_path', type=str,
                        default='./data/TrainDataset', help='path to train dataset')
    parser.add_argument('--train_save', type=str,
                        default='PraNet_Res2Net')
    opt = parser.parse_args()

    # ---- build models ----
    # torch.cuda.set_device(0)  # set your gpu device
    model = PraNet().cuda()

    # ---- flops and params ----
    # from utils.utils import CalParams
    # x = torch.randn(1, 3, 352, 352).cuda()
    # CalParams(lib, x)

    params = model.parameters()
    optimizer = torch.optim.Adam(params, opt.lr)

    image_root = '{}/image/'.format(opt.train_path)
    gt_root = '{}/mask/'.format(opt.train_path)

    train_loader = get_loader(image_root, gt_root, batchsize=opt.batchsize, trainsize=opt.trainsize)
    total_step = len(train_loader)

啊,好长。
给一个简单的例子:

import argparse
# 1. 创建一个解析器
parser = argparse.ArgumentParser(description="A test program")
# 2. 添加参数
parser.add_argument('config', help = 'config file path')
parser.add_argument('img', help = 'image path to be tested')
# 3. 解析参数
args = parser.parse_args()
print(args)

所以很容易看明白:
argparse是一个命令行解析工具——它是python标准库推荐使用的命令行参数解析工具。它可以让人轻松编写用户友好的命令行接口,程序定义它需要的参数,然后argparse将弄清如何从sys.argv中解析出这些参数。argparse模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

使用说明

一般使用方式非常简单,就是上面三板斧:

1. 创建解析器
2. 添加参数
3. 解析参数

对应的代码就是:

parser = argparse.ArgumentParser()
parser.add_argument(...)
args = parser.parse_args()

相关文章

网友评论

      本文标题:20.11.10 python函数参数与argparse命令行解

      本文链接:https://www.haomeiwen.com/subject/vfcjbktx.html