Python—argparse模块

介绍

最近在看深度学习的一些代码,发现大佬们经常使用argparse包,于是看了看这个包的简单用法。
argparse是Python的内置包,不需要手动安装。它是Python 标准库中推荐的命令行解析模块。

传入一个位置参数

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-epochs', type=int, help='训练轮次')
# 解析参数列表
args = parser.parse_args()
# 使用.参数名可以获取到参数值
print(args.epochs)
add_argument函数用于指定程序能够接受哪些命令行选项。
    1. 第一个参数为添加的位置参数名称
    2. 第二个参数 type 为该位置参数的类型
    3. 第三个参数 help 为提示信息

打开命令行窗口,切换到当前目录,输入命令 python test.py -epochs 100 可以看到输出结果为100.

  • 如果不传值默认为None

输入命令 python test.py -hpython test.py --help 可以看到帮助信息:

usage: test.py [-h] [-epochs EPOCHS]

optional arguments:
  -h, --help      show this help message and exit
  -epochs EPOCHS  训练轮次

为单个参数传入多个值

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-epochs', type=int, nargs='+', help='训练轮次')

args = parser.parse_args()

print(args.epochs)

add_argument 方法中设置 nargs 参数可以输入多个值,其中:

'+' 表示参数可设置一个或多个
'*' 表示参数可设置零个或多个
'?' 表示参数可设置零个或一个
N 表示参数为N个

在命令行中输入 python test.py -epochs 100 80 50 10, 将看到返回结果:[100, 80, 50, 10]

添加多个参数

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-epochs', type=int, help='训练轮次')
parser.add_argument('-learning_rate', type=float, help='学习率')
parser.add_argument('-image_size', type=int, help='输入图片大小')

args = parser.parse_args()

print('训练轮次:', args.epochs)
print('学习率:', args.learning_rate)
print('图片大小:', args.image_size)

在命令行中输入 python test.py -epochs 100 -learning_rate 0.001 -image_size 224,可以看到输出的结果:

训练轮次: 100
学习率: 0.001
图片大小: 224

可选参数

有时候我们会遇到可选的参数,在参数名前加 '--' 即可。

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-epochs', type=int, help='训练轮次')
parser.add_argument('--checkpoint', type=bool, help='是否保存检查点')

args = parser.parse_args()

print('训练轮次:', args.epochs)
print('是否保存检查点:', args.checkpoint)

在命令行中输入 python test.py -epochs 100 ,可以看到输出结果:

训练轮次: 100
是否保存检查点: None

输入 python test.py -epochs 100 --checkpoint True,则输出结果变为:

训练轮次: 100
是否保存检查点: True

短选项

如果你熟悉命令行的用法,会知道可以为参数设置一个便捷输入。

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-epochs', type=int, help='训练轮次')
parser.add_argument('-lr', '--learning_rate', type=float, help='学习率')
args = parser.parse_args()

print('训练轮次:', args.epochs)
print('学习率:', args.learning_rate)

在命令行输入 python test.py -epochs 100 --learning_rate 0.001,可以看到输出结果:

训练轮次: 100
学习率: 0.001

输入 python test.py -epochs 100 -lr 0.001, 也可以得到相同的输出结果。这样可以方便一些参数的输入。

从代码中可以看到短选项只能与可选参数搭配使用。

默认值

可以在 add_argument 方法中设置 default 参数,来为参数指定默认值。

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-epochs', type=int, default=100,help='训练轮次')
parser.add_argument('-lr', '--learning_rate', type=float, default=0.001,help='学习率')
args = parser.parse_args()

print('训练轮次:', args.epochs)
print('学习率:', args.learning_rate)

在控制台输入命令 python test.py, 可以得到运行结果:

训练轮次: 100
学习率: 0.001

必须参数

可以在 add_argument 方法中设置 required 参数,指定该参数必须输入。

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-epochs', type=int, required=True, help='训练轮次')

args = parser.parse_args()

print('训练轮次:', args.epochs)

在命令行输入 python test.py ,将会报错:

usage: test.py [-h] -epochs EPOCHS
test.py: error: the following arguments are required: -epochs

如果不指定 required=True, 若不传入值,则默认为None,而现在不传入值,将会报错。

输入 python test.py -epochs 50, 将会看到期望的结果50

限定参数的值

可以在 add_argument 方法中设置 choices 参数,指定该参数的可能值。

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-epochs', type=int, choices=[10,50,100],help='训练轮次')

args = parser.parse_args()

print('训练轮次:', args.epochs)

我们使用 choicesepochs 的取值限定为 10,50,100,如果输入的数不在这三个数之中,则会报错。

更改 parse_args 中的参数名称

可以在 add_argument 方法中设置 dest 参数,指定该参数在parse_args中的名称。

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-epochs', type=int, dest='e',help='训练轮次')

args = parser.parse_args()

print('训练轮次:', args.e)

上面的代码中,我们使用 destepochs 参数在parse_args中的名称改为了 e
注意在命令行中输入的命令仍为 python test.py -epochs 5

传入bool类型

如果将 type 参数设置为 bool,那么参数输入什么,永远都是 True,这个设定有些反常识,我们可以使用 action='store_true' 达到传入bool类型的目的。

import argparse

parser = argparse.ArgumentParser()

# 如果这样设置,无论输入什么,永远都是True,除非不指定该参数,那么默认值为None
# parser.add_argument('--save', type=bool ,help='是否保存训练权重')

# store_true表示如果指定该参数,则为 True, 然后设置默认值为False
parser.add_argument('--save', action='store_true',default=False ,help='是否保存训练权重')

args = parser.parse_args()

print('是否保存:', args.save)

此时在控制台输入 python test.py --save ,会打印出 True,如果直接输入python test.py,则结果为 False
同样的 store_false 表示指定该参数时值为False,此时的默认值应该设置为 True

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值