5

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

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

根据这些参数生成键是一个小问题,因为在 Python 中,函数对象相等性等同于函数对象标识,即使函数实现没有改变,它也不会在会话之间持续存在。

我暂时通过将函数名称用作字符串来解决这个问题,但是当人们开始考虑更改函数或匿名函数的实现等时,这会引发一系列问题。但我可能不是第一个担心这些事情的人。

有没有人有任何策略可以在 Python 中使用函数参数持续记忆函数?

4

2 回答 2

3

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

它将为函数的代码生成一个字符串表示。那应该处理不断变化的实现和匿名函数。

于 2012-02-19T23:16:36.903 回答
2

看看使用 this 作为函数的标识

[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-19T23:12:02.203 回答