Python:使用函数参数持久记忆函数的策略?

时间:2012-02-19 22:52:38

标签: python functional-programming memoization object-persistence

我写了一个小课程来持续记忆一些对随机网络进行各种统计分析的昂贵函数。

这些都是纯粹的功能;所有数据都是不可变的。但是,有些函数将函数作为参数。

基于这些参数创建密钥是一个小问题,因为在Python中,函数对象相等等同于函数对象标识,即使函数实现没有改变,它也不会在会话之间持久存在。

我暂时使用函数名作为字符串来解决这个问题,但是当我开始考虑更改函数或匿名函数的实现等时,这会引发自己的问题。但我可能不是第一个担心这类事情的人。

有没有人有任何策略在Python中持久记忆函数参数的函数?

2 个答案:

答案 0 :(得分:3)

一种选择是使用marshal.dumps(function.func_code)

它将为函数的代码生成一个字符串表示。这应该处理更改实现和匿名函数。

答案 1 :(得分:2)

看一下使用它作为函数的身份

[getattr(func.__code__,s) 
 for s in ['co_argcount', 'co_cellvars', 'co_code', 'co_consts', 
           'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars',
           'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize',
           'co_varnames']
]

应该正确处理以任何方式更改实现......