我想了解我目前正在使用的一段代碼(它的pacman)。Python中的__hash__函數
我在Python以下2D陣列:
self.data = [[initialValue for y in range(height)] for x in range(width)]
變量初值是默認爲F.因此陣列是(含有值「F」爲列表中的每個元素列表的列表等左右):
# F F F F
# F F F F
# F F F F
現在我的代碼執行以下操作 - 我明白這部分,但認爲把它列入情況下,它事項我的問題:
def __getitem__(self, i):
return self.data[i]
def __setitem__(self, key, item):
self.data[key] = item
def __str__(self):
out = [[str(self.data[x][y])[0] for x in range(self.width)] for y in range(self.height)]
out.reverse() #reverses the oder of with the last row of the two dimensional array becoming the first row.
return '\n'.join([''.join(x) for x in out]) #every line is appended with a space '' followed by a line-break with '\n'
後者使用\ n分界符將網格變成F的棋盤。 #FFF #FFF #FFF #FFF
def __eq__(self, other): # The __eq__ method compares other instances of the class with itself
if other == None: return False
return self.data == other.data
def __hash__(self):
# return hash(str(self))
base = 1
h = 0
for l in self.data:
for i in l:
if i:
h += base
base *= 2
return hash(h)
我碰巧知道大部分,*但是當涉及到_ 哈希 _功能。*
我迷路我做過研究散列表和散列表,但我似乎無法找到函數hash()對我們的變量h做什麼?
什麼讓我困惑的是以下幾點:
1.好像我們正在創造某種哈希表的此基於self.data,但似乎我們離開這個哈希表是空的?我們爲什麼要這樣做?
2.在我看來,像_ 哈希 _功能以某種方式連接到生成密鑰內循環。
在這個階段,我可以想象,h是某種形式的關鍵。每次通過循環時,密鑰本身的值似乎都會增加。
讓我困惑的是表格實際上是什麼樣子?
這是嗎?
# 1 - value
# 2 - value
# 3 - value
# 6 - value
# 7 - value
# 8 - value
等等
3.任何人可以點我的資源,將提供給我什麼散列(H)的想法確實到h程序上?
非常感謝您閱讀本文並希望爲您提供幫助。
邁克
['__hash__'](http://docs.python.org/2/reference/datamodel.html#object.__hash__) – thefourtheye
謝謝thefourtheye - 但我試圖理解python文檔,它沒有屈服我期待的清晰度。解釋hash()函數在程序上做什麼的任何其他資源?在cPython中, – Z101
,整數的散列本身就是這樣,所以'return hash(h)'就等於'return h' ...... – roippi