哈希搜索优化
在性能敏感的代码中,选择合适的数据结构和哈希函数可以显著提升查找效率。
例如判断集合、字典的成员,对其频繁操作时,合理的 key 值设计 能减少哈希计算开销,提高性能。
避免使用字符串拼接作为 key
在 Python 中,字符串拼接作为字典或集合的 key 会带来额外开销,每次查询都需要创建新的字符串对象。推荐使用 元组等不可变类型,以提高性能和可读性。
python
# 不推荐(字符串拼接开销较大)
def getSystem(namespace, systemName):
# 每次查询都要拼接字符串显著增加开销
return SYSTEM_MAP.get(namespace + "::" + systemName)
# 推荐(元组作为key,哈希计算更高效)
def getSystem(namespace, systemName):
# 元组通常更为轻量,只需要储存引用即可
return SYSTEM_MAP.get((namespace, systemName))使用合适的哈希函数
对于自定义对象作为字典或集合的key时,确保实现高效的 __hash__ 方法:
python
class SystemKey:
def __init__(self, namespace, systemName):
self.namespace = namespace
self.systemName = systemName
self._tuple = (namespace, systemName)
def __hash__(self):
return hash(self._tuple)
def __eq__(self, other):
if not isinstance(other, SystemKey):
return NotImplemented
# 使用元组比较减少字节码量级,提高效率
return self._tuple == other._tuple预计算哈希值
对于频繁使用的key,可以预计算哈希值以减少重复计算开销:
python
class SystemKey:
def __init__(self, namespace, systemName):
self.namespace = namespace
self.systemName = systemName
self._tuple = (namespace, systemName)
# 预计算哈希值
self._hash = hash(self._tuple)
def __hash__(self):
return self._hash
def __eq__(self, other):
if not isinstance(other, SystemKey):
return NotImplemented
return self._tuple == other._tuple