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()
网友评论