1

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

函数签名是

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

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

4

2 回答 2

2

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

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

@lru_cache
def _Hamming(A, B):
    ...
于 2021-02-08T09:11:06.053 回答
0

另外的选择:

from cachetools import cached
from cachetools.keys import hashkey

@cached(cache={}, key=lambda A, B: hashkey((A, B) if A < B else (B, A)))
def Hamming(A: str, B: str) -> int:
    ...

或者一般来说:

@cached(cache={}, key=lambda *args: hashkey(tuple(sorted(args))))
def Hamming(A: str, B: str) -> int:
    ...
于 2021-02-08T09:54:11.643 回答