如何编写一个python函数包装器,如果已知输入参数的哈希值,它将加载结果?

时间:2018-01-19 14:31:36

标签: python machine-learning

我的机器学习环境中的许多功能都是确定性的。意思是,对于相同的输入,它们总是具有完全相同的输出。

由于我经常使用相同的参数调用这些函数,我想自动检测计算是否在之前完成。如果是,则从pickle文件重新加载,否则使用参数的散列计算并存储到pickle文件。

我该如何实现?有了包装类吗?装饰师?

1 个答案:

答案 0 :(得分:1)

你可以使用一个装饰器来更新一个列表,其中包含每个被调用的函数的名称,以便以后在包装器中使用:

import pickle
called_functs = []
def called(f):
  def call_wrapper(*args, **kwargs):
     if f.__name__ in called_functs:
        data = pickle.load(open('filename.txt'))
        #do something with data
     else:
        global called_functs
        called_functs.append(f.__name__)
        pickle.dump([args, kwargs, f(*args, **kwargs)], open('filename.txt', 'w'))
   return call_wrapper

@called
def backpropagate(*args, **kwargs): #example from a neural net
   pass
   #do something