如果我将其另存为load_on_run.py
:
import argparse
import numpy as np
if __name__=='__main__':
parser = argparse.ArgumentParser()
parser.add_argument('-l','--list', help='list variables', action='store_true')
parser.add_argument('filename')
__args = parser.parse_args()
data = np.load(__args.filename)
locals().update(data)
del parser, data, argparse, np
if __args.list:
print([k for k in locals() if not k.startswith('__')])
del __args
然后在ipython
我可以调用它%run
:
In [384]: %run load_on_run testarrays.npz -l
['array2', 'array3', 'array4', 'array1']
In [385]: array3
Out[385]: array([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1])
它巧妙地将数组从文件加载到ipython
工作区。
我正在利用魔法这一事实%run
运行脚本,将其定义的所有函数和变量保留在主命名空间中。我还没有研究过它是如何做到这一点的。
该脚本只需要几个参数,加载文件(到目前为止仅.npz
),并使用locals().update
将其变量放入本地命名空间的技巧。然后我清除了不必要的变量和模块,只留下新加载的变量和模块。
我可能可以定义一个别名%run load_on_run
.
我还可以想象一个这样的脚本,它可以让您通过导入来加载变量:from <script> import *
.