hash(-1) == hash(-2) 是个彩蛋吗?等等,这是真的吗?
Python 的参考实现是 "CPython",这很大概就是你正在使用的 Python。CPython 是用 C 语言编写的,与 Python 差别,C 语言没有异常处理。所以,在 C 语言中,当你设计一个函数,并且想要表示"发生了错误"时,必须通过返回值来表示这个错误。这正是我通过阅读代码推测出的结果。
CPython 中的 hash() 函数大概返回错误,所以它定义返回值 -1 表示"发生了错误"。但如果哈希计算正确,而对象的实际哈希值恰好是 -1,这大概会造成肴杂。所以约定是:如果哈希计算乐成,并得到值是 -1,就返回 -2。
在 CPython 中,整数("长整型对象")的哈希函数中有专门的代码来处理这种情况:
https://github.com/python/cpython/blob/main/Objects/longobject.c#L2967
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |