2
我有一個三維點類,根據分析器的散列函數將是一個很好的地方做一些優化。現在,我只是路過的座標的元組內置的散列函數:優化3d點散列函數
def __hash__(self):
return hash((self.x, self.y, self.z))
我怎樣才能使這個快?我假設每次構建一個元組都不好。座標是實值的。
我有一個三維點類,根據分析器的散列函數將是一個很好的地方做一些優化。現在,我只是路過的座標的元組內置的散列函數:優化3d點散列函數
def __hash__(self):
return hash((self.x, self.y, self.z))
我怎樣才能使這個快?我假設每次構建一個元組都不好。座標是實值的。
使用元組而不是自己的類會快得多。
如果你真的想寫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]
嘗試使用named tuple而不是您自己的班級。
我用CPython做了一些任意測試。像這樣使用預先生成的元組減少了我的哈希時間,位移幾乎增加了一倍。 – lunixbochs 2011-12-23 23:02:03
爲什麼這比一個命名的元組好? – 2011-12-24 20:39:54
我認爲這不是,我贊成你的答案。 – 2011-12-24 20:40:34