gpt4 book ai didi

python - 如何清除 memoize 缓存?

转载 作者:太空狗 更新时间:2023-10-30 03:00:18 31 4
gpt4 key购买 nike

我使用以下装饰器来缓存纯函数返回:

def memoize(obj):
cache = obj.cache = {}

@functools.wraps(obj)
def memoizer(*args, **kwargs):
if args not in cache:
cache[args] = obj(*args, **kwargs)
return cache[args]
return memoizer

它工作得很好,但我遇到了这样的单元测试问题:

class TestFoo(unittest.TestCase):

def setUp(self):
# clear the cache here
pass

@patch('module1.method1')
def test_method1_1(self, method1):
method1.return_value = ""
d = module1.method2()
self.assertTrue(len(d) == 0)

@patch('module1.method1')
def test_method1_2(self, method1):
method1.return_value = "TEST1234"
d = module1.method2()
self.assertTrue(len(d) == 2)

我的问题是 module1.method1 是用 memoize 装饰的,所以从一个测试到另一个测试,它的返回值被缓存并且不会随后续 改变code>method1.return_value = "..." 赋值。

如何清除memoize缓存?当我弄清楚这一点时,我会在测试用例的 setUp 方法中清除缓存。

最佳答案

装饰器通过在函数中注入(inject)字典来工作

您可以手动清除该词典:

@memoize
def square (x):
return x*x

square(2)
square(3)

print square.__dict__
# {'cache': {(2,): 4, (3,): 9}}

square.cache.clear()
print square.__dict__
# {'cache': {}}

您可以在 TearUp 方法中使用 module1.method1.cache.clear()

关于python - 如何清除 memoize 缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29918513/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com