当我遇到一组奇怪的时序结果时,我正在搞乱一个小的自定义数据对象需要可以清洗,可比较和快速.这个对象的一些比较(和散列方法)只是委托给一个属性,所以我使用的是:
def __hash__(self):
return self.foo.__hash__()
Run Code Online (Sandbox Code Playgroud)
但经过测试,我发现它hash(self.foo)明显更快.出于好奇,我测试__eq__,__ne__和其他神奇的比较,才发现所有的人跑得更快,如果我用含糖的形式(==,!=,<等).为什么是这样?我认为加糖形式必须在引擎盖下进行相同的函数调用,但也许情况并非如此?
设置:围绕控制所有比较的实例属性的薄包装器.
Python 3.3.4 (v3.3.4:7ff62415e426, Feb 10 2014, 18:13:51) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import timeit
>>>
>>> sugar_setup = '''\
... import datetime
... class Thin(object):
... def __init__(self, f):
... self._foo = f
... def __hash__(self):
... return hash(self._foo)
... def __eq__(self, other):
... return self._foo …Run Code Online (Sandbox Code Playgroud)