Mik*_*ski 4 python hash integer
我需要一个非常简单的Python函数,它将字符串转换为0到255之间的整数.
例如:
>>> hash_function("abc_123")
32
>>> hash_function("any-string-value")
99
Run Code Online (Sandbox Code Playgroud)
只要每次调用函数时得到相同的整数,整数是什么并不重要.
我想使用整数来生成基于网络名称的随机子网掩码.
Mar*_*ers 17
你可以使用hash()函数输出的模数:
def onebyte_hash(s):
return hash(s) % 256
Run Code Online (Sandbox Code Playgroud)
这是字典和集合使用的内容(哈希模数为内部表大小).
演示:
>>> onebyte_hash('abc_123')
182
>>> onebyte_hash('any-string-value')
12
Run Code Online (Sandbox Code Playgroud)
警告:在Python 3.3及更高版本中,默认情况下启用哈希随机化,在重新启动Python之间,您将获得不同的值.然后,如果您不重新启动Python进程或设置PYTHONHASHSEED为固定的十进制数(并0完全禁用它),那么哈希就是稳定的.在Python 2和3.0到3.2哈希随机化要么不可用,要么仅在您明确设置种子时才启用.
另一个替代方法是hashlib.md5()只取第一个字节的(整数值):
import hashlib
try:
# Python 2; Python 3 will throw an exception here as bytes are required
hashlib.md5('')
def onebyte_hash(s):
return ord(hashlib.md5(s).digest()[0])
except TypeError:
# Python 3; encode the string first, return first byte
def onebyte_hash(s):
return hashlib.md5(s.encode('utf8')).digest()[0]
Run Code Online (Sandbox Code Playgroud)
MD5是一个完善的加密哈希,输出在Python版本中是稳定的,并且独立于哈希随机化.
后者的缺点是它会慢一点; Python在字符串对象上缓存字符串哈希,因此稍后检索哈希在大多数情况下都是快速且便宜的.
| 归档时间: |
|
| 查看次数: |
5013 次 |
| 最近记录: |