在部分调试场景下,我们需要保存函数运行的现场,方便直接从函数入口开始调试(而不是从头开始运行整个工程),我们通常会选择把函数入参保存到文件,再次调试时我们从文件运行即可。下面的代码段提供了一个功能,把函数所有入参保存到文件,然后重新从文件load函数入参,并调用函数。泛型入参都打包到字典,保证代码复用。
locals()函数返回当前工作区的所有变量(如果放在函数开头,工作区就只有函数入参,如果放在函数末尾,那么函数内部其它局部变量也会被记录),np.savez 底层会调用pickle进行保存,同样的np.load也用pickle进行load,我们把它重新解包出来即可。
import numpy as np def func(a, b, c): inputs = locals() np.savez('input.npz', inputs) print(a,b,c) def run_func_from_file(filename): npz = np.load(filename, allow_pickle=True) inputs = npz['arr_0].reshape(1, -1)[0][0] func(**inputs) if __name__ == "__main__": func(1, 2, 3) run_func_from_file('input.npz')