Python保存函数入参到文件,并从文件load再次调用

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

发表评论