目录
3. parse_known_args() 与 parse_args()
Argparse为Python内置模块,无需另外下载任何第三方库,用于命令行参数解析,我们可以用此方便地编写命令行接口,为模型定义和修改参数。
1. 主要步骤
定义argparse主要分为四个步骤:
(1) 导入argparse模块:import argparse
(2) 创造命令行解析器对象ArgumentParse
(3) 为解析器对象添加命令行参数:调用add_argument()函数
(4) 解析命令行参数:parse_args()
# 1.
import argparse
# 2.
parser = argparse.ArgumentParse()
# 3.
parser.add_argument(name...[, action][, default][, type][, choices][, help])
# 4.
args = parser.parse_args()
2. ArgumentParse
argparse.ArgumentParse(prog=None,description=None,parents=[], add_help=True)
■prog:程序的名称(defult:sys.argv[0])
■ description:Text to display before the argument help (default:no text)
■ parents: 一个 ArgumentParse 对象的列表,它们的参数也应包含在内
■ add_help: 为解析器添加 -h/--help 选项(defaul: True)
3. add_argument()
(1) 属性名之前添加“--”,使之变成为可选参数;
## 属性名之前添加“--”,使之变成为可选参数
parser.add_argument(
'--model',
type=str,
help='The naeme of the model for prediction',
choices=('RNN', 'LSTM', 'GRU'),
default='LSTM'
)
(2) 参数简写
parser.add_argument(
'-m',
'--model',
type=str,
help='The naeme of the model for prediction',
choices=('RNN', 'LSTM', 'GRU'),
default='LSTM'
)
内部依旧使用args.model,命令行只需输入:python main.py -m 'GRU'
参数简写时不要定义“-h”,这个是给help用的
(3) 参数顺序
一般首先add不可选参数,最后add可选参数。
在命令行赋值时,程序按照add顺序赋值
parser.add_argument('a', type=int, help=...)
parser.add_argument('b', type=int, help=...)
命令行输入:python main.py x y
则args.a = x; args.b =y
4. parse_known_args() 与 parse_args()
(1)parse_args()
parse.add_argument('-w','--weight_decay', type=float, default=0.6, help='Regularizaiton')
opt = parse.parse_args()
print(opt)
命令行输入 :python main.py -w 0.2
parse_args()函数返回的是一个命名空间Namespace:
Namespace(w=0.2)
若命令行输入: python main.py -w 0.2 --unit 0.3
很显然输入比add_argument()的参数多一个参数,会报错
>> error:unrecognized arguments: --unit 0.3
(2)parse_known_args()
parse.add_argument('-w','--weight_decay', type=float, default=0.6, help='Regularizaiton')
opt = parse.parse_known_args()
print(opt)
命令行输入: python main.py -w 0.2 --unit 0.3
此时不会报错,返回包含有两个元素的元组,而多余的参数以字符串的形式存放在元组的第二个元素即list当中,即如果运行命令中传入了之后才会获取到的其他配置,将多出来的部分保存起来,留到后面使用。
(Namespace(w=0.2), ['--unit', '0.3'])
Namespace(w=0.2)
['--unit', '0.3']
若后面多余参数仍未配置,最后仍会报错。