ale*_*a87 1 python hash hashtable
上下文:构建一致的哈希算法。
\nPython 函数的官方文档指出hash():
\n\n返回对象的哈希值(如果有)。哈希值是整数。
\n
但是,它没有明确说明该函数是否映射到整数范围(具有最小值和最大值)。
\n来自其他原始类型值有界的语言(例如 C#\'s/Java\'s Int.MaxValue),我知道Python 喜欢用“无界”术语\xe2\x80\x93 进行思考,即从 切换int到longin的背景。
我是否可以假设该hash()函数也是无界的?或者它是否有界,例如映射到 Python 分配给“int-proper” \xe2\x80\x93的最大/最小值(-2147483648即在 到之间)2147483647?
正如其他人指出的那样,文档中有一个错误的[1]注释,内容如下:
\n\n\nhash() 将从 object\xe2\x80\x99s 自定义hash () 方法返回的值截断为 Py_ssize_t 的大小。
\n
要回答这个问题,我们需要得到这个Py_ssize_t。经过一些研究,它似乎存储在 中sys.maxsize,尽管我希望在这里得到一些反馈。
我最终采用的解决方案是:
\nimport sys\nbits = sys.hash_info.width # in my case, 64\nprint (sys.maxsize) # in my case, 9223372036854775807\n\n# Therefore:\nhash_maxValue = int((2**bits)/2) - 1 # 9223372036854775807, or +sys.maxsize\nhash_minValue = -hash_maxValue # -9223372036854775807, or -sys.maxsize\nRun Code Online (Sandbox Code Playgroud)\n很高兴收到对此 \xe2\x80\x93 的评论/反馈,直到被证明是错误的,这是公认的答案。
\n[1]该注释包含在专门针对 的章节中,__hash__()而不是专门针对 的章节中hash()。