Skip to content

哈希搜索优化

在性能敏感的代码中,选择合适的数据结构和哈希函数可以显著提升查找效率。
例如判断集合、字典的成员,对其频繁操作时,合理的 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

Released under the BSD3 License