首页 > 解决方案 > @lru_cache 在具有交换参数的函数上

问题描述

我正在计算 2 个字符串之间的汉明距离,其中Hamming(A,B) == Hamming(B,A)

函数签名是

@lru_cache
def Hamming(A:str,B:str)->int:
    ...

如何修改@lru_cache 或在索引缓存时忽略参数顺序的函数?

标签: python-3.xdynamic-programmingcommutativity

解决方案


您可以插入一个额外的函数调用,可预测地重新排列参数:

def Hamming(A: str, B: str) -> int:
    if B < A:
        A, B = B, A
    return _Hamming(A, B) 

@lru_cache
def _Hamming(A, B):
    ...

推荐阅读