我看到了一个代码示例,其中hash函数应用于元组.结果它返回一个负整数.我想知道这个功能是做什么的.谷歌没有帮助.我找到了一个页面,解释了如何计算哈希,但它没有解释为什么我们需要这个函数.
我不明白如何functools.lru_cache处理对象实例。我假设该类必须提供一种__hash__方法。因此任何具有相同哈希值的实例都应该hit缓存。
这是我的测试:
from functools import lru_cache
class Query:
def __init__(self, id: str):
self.id = id
def __hash__(self):
return hash(self.id)
@lru_cache()
def fetch_item(item):
return 'data'
o1 = Query(33)
o2 = Query(33)
o3 = 33
assert hash(o1) == hash(o2) == hash(o3)
fetch_item(o1) # <-- expecting miss
fetch_item(o1) # <-- expecting hit
fetch_item(o2) # <-- expecting hit BUT get a miss !
fetch_item(o3) # <-- expecting hit BUT get a miss !
fetch_item(o3) # <-- expecting hit …Run Code Online (Sandbox Code Playgroud)