我想将Python hash()函数返回的值映射到0到1范围内的浮点数.在我的系统上,我可以使用
scale = 1.0/(2**64)
print hash(some_object)*scale+0.5
Run Code Online (Sandbox Code Playgroud)
但是,我知道这在32位系统上会有所不同.我很可能永远不会在其他任何地方运行此代码,但我仍然想知道是否有一种方法可以通过编程方式确定Python内置hash()函数可以返回的最大值和最小值.
(顺便说一下,我这样做的原因是我正在开发一个数值模拟,我需要从给定的Numpy数组中始终生成相同的伪随机数.我知道内置的哈希不会有对此最好的统计数据,但速度很快,因此将其用于测试目的很方便.)
Python >= 3.2 具有返回一个命名元组,其中包含具有哈希值位宽的sys.hash_info键。width示例:(为了可读性而添加换行符)
Python 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.hash_info
sys.hash_info(
width=64,
modulus=2305843009213693951,
inf=314159,
nan=0,
imag=1000003,
algorithm='siphash24',
hash_bits=64,
seed_bits=128,
cutoff=0
)
Run Code Online (Sandbox Code Playgroud)
如图所示,我的机器上的 Python 使用 64 位哈希值。
请注意,如果一个类实现__hash__()但返回超出此位宽度的整数,则它将被截断。
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |