我正在尝试优化对象的性能并从此模式切换:
class match(object):
def __init__(self, fn):
self.matchfn = fn
def __call__(self, val):
return self.matchfn(val)
到
class match(object):
def __init__(self, fn):
self.__call__ = fn
特别重要的是,__call__
在此对象上被称为数十万次。
从在shell中进行测试,它似乎工作得更快,但一旦与我的所有其余代码集成,它就无法工作。
由于一个不明原因,我的实例有一个__call__
方法但不被视为可调用。
这是我用来尝试调试问题的pdb会话:
844 def __call__(self, value):
845 for match in self._matchers:
846 import pdb; pdb.set_trace()
847 -> if match(value):
848 return True
849 return False
(Pdb++) print match.__call__
<function <lambda> at 0x1258b0a28>
(Pdb++) print match.__call__(value)
False
(Pdb++) print match(value)
*** TypeError: 'match' object is not callable
我能错过什么?