我已经写了一个小类来持久地记忆一些昂贵的函数,这些函数对随机网络进行各种统计分析。
这些都是纯函数;所有数据都是不可变的。但是,一些函数将函数作为参数。
基于这些参数生成键是一个小问题,因为在Python中,函数对象相等等同于函数对象标识,即使函数实现没有更改,这种标识在会话之间也不会持久存在。
我暂时通过使用函数名作为字符串来解决这个问题,但当人们开始考虑更改函数的实现或匿名函数等时,这会引发一大堆问题。但我可能不是第一个担心这样的事情的人。
有没有人有什么策略可以在Python中持久化地记忆带有函数参数的函数?
发布于 2012-02-20 07:12:02
看一下如何使用它作为函数的标识
[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']
]它应该正确地处理以任何方式改变实现...
发布于 2012-02-20 07:16:37
一种选择是使用marshal.dumps(function.func_code)
它将为函数的代码生成一个字符串表示。它应该能够处理更改的实现和匿名函数。
https://stackoverflow.com/questions/9354087
复制相似问题