本文已参与「新人创作礼」活动,一起开启掘金创作之路。
(一)直接看如何实现
jupyter notebook其实是可以使用 argparse来调用参数的,只要把参数转为list即可。
不能在jupyter notebook运行的代码(在shell里运行):parser.parse_args() 能在jupyter notebook运行的代码:parser.parse_args(arg_list)
只需要两步:
第一步. 创建一个简单的配置文件:config.ini
[train]
batch_size=32
num_layers=2
第二步. 用configparser类来加载这个文件,并将配置转换为list类型,再将list传入parser.parse_args(),即可无缝加入到argparse类里面。
下面是完整代码:
import argparse
import configparser
if __name__ == "__main__":
jupyter = True # 如果不在jupyter notebook中,就改为False.
parser = argparse.ArgumentParser(description='test')
parser.add_argument('--batch_size', type=int, default=64)
parser.add_argument('--num_layers', type=int, default=2)
arg_list = None
if jupyter:
# load from config.ini,如果是用jupyter, 就转换配置为list再传入argparse
config = configparser.ConfigParser()
config.read('config.ini')
# 其实是个字典:
# print(config['train']['batch_size'])
arg_list = []
for k, v in config['train'].items():
arg_list.append("--"+k)
arg_list.append(v)
# 如果不是用jupyter,arg_list就是None,和用命令行执行没有区别。
args = parser.parse_args(arg_list)
print('args:', args)
以上代码可以放到jupyter文件里面直接执行或者是放到python文件中用命令行执行,如:python main.py --batch_size=200
(二)进一步理解
这个部分如果不想深入了解的话,完全不用看。
简单来说,argparse 包就是连接linux系统和python程序的一个接口包。通过这个包,你可以将linux命令行,其实还有别的输入,输入到你写的python程序里面。其实这有点像管道的作用。
下面是官方定义,可以直接过去看详细的参数。
parse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。