需要记忆化的函数才能像函数一样嘎嘎叫

2024-09-28 22:19:43 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的代码中,我使用了Python Decorator库中的nice memoized类。在

我用了一个函数,用了一个自省函数。具体地说,它检查co_argcount变量。在

if (PyInt_AsLong(co_argcount) < 1) {
      PyErr_SetString(PyExc_TypeError, "This function has no parameters to mini\
mize.");

似乎argcount没有被转移到memorized函数。在

^{pr2}$

如何修改memorized类,使我的memorized函数看起来、尝起来和闻起来都像原来的函数?在


Tags: 函数代码ifdecoratornicecomemoizedtypeerror
2条回答

将其添加到您的memoized类中

def __getattr__(self, name):
    if name.startswith('func_'):
        return getattr(self.func, name)
    raise AttributeError

所以它将把func_...的属性查找传递给原始函数。在

也许您还需要编写一个__setattr__函数来拒绝写入这些属性,但是如果您知道您不会尝试更改这些值,那么就没有必要了。在

您需要创建一个保持签名的装饰器。最简单的方法是使用库http://pypi.python.org/pypi/decorator,它负责为您保存签名。在

库的内部结构非常丑陋(它使用exec!)但它很好地封装了它们。在

相关问题 更多 >