在部分调试场景下,我们需要保存函数运行的现场,方便直接从函数入口开始调试(而不是从头开始运行整个工程),我们通常会选择把函数入参保存到文件,再次调试时我们从文件运行即可。下面的代码段提供了一个功能,把函数所有入参保存到文件,然后重新从文件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')