python argparse基础使用总结

前言

在使用python时,比如训练模型,我们可能有许多超参数需要修改,而如果只能在代码中将超参修改,有点麻烦。我们可以使用类似命令行中的参数,这样当用户在命令行中运行python文件时,可以附带上参数名和自定义的参数值。

参考

使用

基础使用

parser = argparse.ArgumentParser("parse")
print(parser)
PS D:\curriculum\cspcodes> python parse.py
ArgumentParser(prog='parse', usage=None, description=None, formatter_class=<class 
'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)

可以看到,新建了一个ArgumentParser,传入的use the parser是参数prog,代表程序名称。
一般使用方法如下所示,新建一个ArgumentParser后,通过add_argument添加我们希望添加的参数,之后通过parse_args函数就能将用户传入的参数放到args中,并使用。

parser = argparse.ArgumentParser("use the parser")
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)
PS D:\curriculum\cspcodes> python parse.py thisIsEcho
thisIsEcho

可以看到,通过args.xxx就可以访问我们传入的参数。

Positional arguments

上面我们设定了参数echo,就是Positional arguments我们必须要传入,否则报错。

PS D:\curriculum\cspcodes> python parse.py                
usage: use the parser [-h] echo
use the parser: error: the following arguments are required: echo

Optional arguments

-xxx 可选参数

此外,我们可以设定可选参数,即用户可以传入,也可以不传入。

parser = argparse.ArgumentParser("use the parser")
parser.add_argument("echo")
parser.add_argument('-option')
args = parser.parse_args()
print(args.echo)
print(args.option)

通过-xxx就可以设置可选参数xxx,上面我们设置了可选参数option

PS D:\curriculum\cspcodes> python parse.py isEcho        
isEcho
None

可以看到,如果我们不传入可选参数,那么就会赋值None

PS D:\curriculum\cspcodes> python parse.py isEcho -option isOption
isEcho
isOption

可以看到,通过-option xxxx就可以传入参数xxxx

–xxx 可选参数

另外,我们可以用--xxxx设置可选参数。

parser = argparse.ArgumentParser("use the parser")
parser.add_argument('-o', '--option')
args = parser.parse_args()
print(args.option)
PS D:\curriculum\cspcodes> python parse.py -o isO
isO

PS D:\curriculum\cspcodes> python parse.py --option isO
isO

上面两种情况都可以设置参数option,我们可以认为,参数option的完整使用是--option,但是为了方便,我们可以使用-o,类似于简称。只能通过args.option获取参数。

add_argument()方法

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

1. help

制定参数的描述帮助信息。

parser = argparse.ArgumentParser("use the parser")
parser.add_argument('--option', help="this is option")
args = parser.parse_args()
PS D:\curriculum\cspcodes> python parse.py -h   
usage: use the parser [-h] [--option OPTION]      

optional arguments:
  -h, --help       show this help message and exit
  --option OPTION  this is option

可以看到,能够输出可选参数option的帮助信息。

2. type和default

分别是确定参数的数据类型和默认值,不通过default设置默认值,那么不传入参数时会设置为None

parser = argparse.ArgumentParser("use the parser")
parser.add_argument('--option', help="this is option", type=int, default=10)
args = parser.parse_args()
print(args.option)
PS D:\curriculum\cspcodes> python parse.py --option 23
23
PS D:\curriculum\cspcodes> python parse.py            
10
3. choices

这里是为参数确定可选值,我们传入的值只能从那里面选,但是default可以不受其限制。

parser = argparse.ArgumentParser("use the parser")
parser.add_argument('--option', help="this is option", type=int, default=10, choices=[1, 2, 3])
args = parser.parse_args()
print(args.option)
PS D:\curriculum\cspcodes> python parse.py
10
PS D:\curriculum\cspcodes> python parse.py --option 2
2
PS D:\curriculum\cspcodes> python parse.py --option 20
usage: use the parser [-h] [--option {1,2,3}]
use the parser: error: argument --option: invalid choice: 20 (choose from 1, 2, 3)
4. nargs

类似于表示我们对一个参数,期望输入多少个值。例如:

  • nargs = n
parser = argparse.ArgumentParser("use the parser")
parser.add_argument('--option', help="this is option", type=int, nargs=3, default=10)
args = parser.parse_args()
print(args.option)

这里nargs=3表示对于参数我们应该输入3个值,之后会将其组织成list

PS D:\curriculum\cspcodes> python parse.py --option 20 30 30
[20, 30, 30]
PS D:\curriculum\cspcodes> python parse.py --option 20 30   
usage: use the parser [-h] [--option OPTION OPTION OPTION]
use the parser: error: argument --option: expected 3 arguments
PS D:\curriculum\cspcodes> python parse.py --option 20 30 30 40
usage: use the parser [-h] [--option OPTION OPTION OPTION]
use the parser: error: unrecognized arguments: 40

可以看到,只能输入3个数字。

  • nargs = '?'
parser = argparse.ArgumentParser("use the parser")
parser.add_argument('--option', help="this is option", type=int, nargs='?', default=10)
args = parser.parse_args()
print(args.option)

对于可选参数来说,设置了nargs = '?',如果传入了一个值,那么就是该参数。
如果没有传入,那么就是default值:

PS D:\curriculum\cspcodes> python parse.py       
10

如果是下面这样,参数是None

PS D:\curriculum\cspcodes> python parse.py --option
None

这种情况如果不加nargs,会报错。如果我们设置了const,那么就不是None,而是const。见下方:

parser.add_argument('--option', help="this is option", type=int, nargs='?', default=10, const=5)
PS D:\curriculum\cspcodes> python parse.py --option
5
  • nargs = ‘+’ nargs=’*'

这两个差不多,会把传入的值组织成list

parser = argparse.ArgumentParser("use the parser")
parser.add_argument('--option', help="this is option", type=int, nargs='*', default=10)
args = parser.parse_args()
print(args.option)
PS D:\curriculum\cspcodes> python parse.py --option 1 2 35
[1, 2, 35]

两者的区别在于:

parser.add_argument('--option', help="this is option", type=int, nargs='*', default=10)

PS D:\curriculum\cspcodes> python parse.py --option
[]
parser.add_argument('--option', help="this is option", type=int, nargs='+', default=10)

PS D:\curriculum\cspcodes> python parse.py --option
usage: use the parser [-h] [--option OPTION [OPTION ...]]
use the parser: error: argument --option: expected at least one argument
5. required

如果required=true,那么可选参数就必须指定值。

parser = argparse.ArgumentParser("use the parser")
parser.add_argument('--option', help="this is option", type=int, default=10, required=True)
args = parser.parse_args()
print(args.option)

PS D:\curriculum\cspcodes> python parse.py
usage: use the parser [-h] --option OPTION
use the parser: error: the following arguments are required: --option
6. action

可以参考官方文档,感觉不太能用得到。

猜你喜欢

转载自blog.csdn.net/qq_43219379/article/details/123842742
今日推荐