python – 如何清除memoize缓存?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何清除memoize缓存?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1103字,纯文字阅读大概需要2分钟。
内容图文
![python – 如何清除memoize缓存?](/upload/InfoBanner/zyjiaocheng/795/131b9dd5e4174e9f8772ca54e2d958c5.jpg)
我使用以下装饰器来缓存纯函数返回:
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修饰,因此从一个测试到另一个测试,它的返回值被缓存,并且不会随后的method1.return_value =“…”赋值而改变.
如何清除memoize缓存?当我弄清楚这一点时,我会清除测试用例的setUp方法中的缓存.
解决方法:
装饰器通过在函数中注入一个字典来工作
您可以手动清除该字典:
@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缓存?全部内容,希望文章能够帮你解决python – 如何清除memoize缓存?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。