2011-12-23 63 views
2

我有一個三維點類,根據分析器的散列函數將是一個很好的地方做一些優化。現在,我只是路過的座標的元組內置的散列函數:優化3d點散列函數

def __hash__(self): 
     return hash((self.x, self.y, self.z)) 

我怎樣才能使這個快?我假設每次構建一個元組都不好。座標是實值的。

回答

5

使用元組而不是自己的類會快得多。

如果你真的想寫p.x而不是p [0],那麼你可以讓你的類成爲元組的子類並擁有訪問器。它仍然比實現自己的元組要快得多。

class Point3d(tuple): 
    @property 
    def x(self): 
     return self[0] 

    @property 
    def y(self): 
     return self[1] 

    @property 
    def z(self): 
     return self[2] 
+0

我用CPython做了一些任意測試。像這樣使用預先生成的元組減少了我的哈希時間,位移幾乎增加了一倍。 – lunixbochs 2011-12-23 23:02:03

+0

爲什麼這比一個命名的元組好? – 2011-12-24 20:39:54

+0

我認爲這不是,我贊成你的答案。 – 2011-12-24 20:40:34