当前位置:   article > 正文

python 自定义类实现hash_如何在Python 3.2中实现__hash__?

python 实现 bigram hash

我想使自定义对象可哈希化(通过腌制)。我可以找到__hash__适用于Python 2.x的算法(请参见下面的代码),但是它显然 不同于

适用于Python 3.2的哈希(我想知道为什么吗?)。有人知道如何__hash__在Python 3.2中实现吗?

#Version: Python 3.2

def c_mul(a, b):

#C type multiplication

return eval(hex((int(a) * b) & 0xFFFFFFFF)[:-1])

class hs:

#Python 2.x algorithm for hash from http://effbot.org/zone/python-hash.htm

def __hash__(self):

if not self:

return 0 # empty

value = ord(self[0]) << 7

for char in self:

value = c_mul(1000003, value) ^ ord(char)

value = value ^ len(self)

if value == -1:

value = -2

return value

def main():

s = ["PROBLEM", "PROBLEN", "PROBLEO", "PROBLEP"]#, "PROBLEQ", "PROBLER", "PROBLES"]

print("Python 3.2 hash() bild-in")

for c in s[:]: print("hash('", c, "')=", hex(hash(c)), end="\n")

print("\n")

print("Python 2.x type hash: __hash__()")

for c in s[:]: print("hs.__hash__('", c, "')=", hex(hs.__hash__(c)), end="\n")

if __name__ == "__main__":

main()

OUTPUT:

Python 3.2 hash() bild-in

hash(' PROBLEM ')= 0x7a8e675a

hash(' PROBLEN ')= 0x7a8e6759

hash(' PROBLEO ')= 0x7a8e6758

hash(' PROBLEP ')= 0x7a8e6747

Python 2.x type hash: __hash__()

hs.__hash__(' PROBLEM ')= 0xa638a41

hs.__hash__(' PROBLEN ')= 0xa638a42

hs.__hash__(' PROBLEO ')= 0xa638a43

hs.__hash__(' PROBLEP ')= 0xa638a5c

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/812156
推荐阅读
相关标签
  

闽ICP备14008679号