首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带可交换参数的函数的@lru_cache

带可交换参数的函数的@lru_cache
EN

Stack Overflow用户
提问于 2021-02-08 17:07:04
回答 2查看 66关注 0票数 1

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

函数签名为

代码语言:javascript
复制
@lru_cache
def Hamming(A:str,B:str)->int:
    ...

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

EN

回答 2

Stack Overflow用户

发布于 2021-02-08 17:11:06

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

代码语言:javascript
复制
def Hamming(A: str, B: str) -> int:
    if B < A:
        A, B = B, A
    return _Hamming(A, B) 

@lru_cache
def _Hamming(A, B):
    ...
票数 2
EN

Stack Overflow用户

发布于 2021-02-08 17:54:12

另一种选择:

代码语言:javascript
复制
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:
    ...

或者一般情况下:

代码语言:javascript
复制
@cached(cache={}, key=lambda *args: hashkey(tuple(sorted(args))))
def Hamming(A: str, B: str) -> int:
    ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66098644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档