gpt4 book ai didi

python - 如何为函数缓存散列 *args **kwargs?

转载 作者:太空狗 更新时间:2023-10-29 16:56:26 24 4
gpt4 key购买 nike

我正在使用 xlwt,它对 excel 文档中可以定义的样式数量有 4k 限制。

通常,一个人会像这样创建样式:

style = xlwt.easyxf("font: bold 1")

我简单地替换为

def cached_easyxf(self, format):
return self._cache.setdefault(format, xlwt.easyxf(format))

效果很好。现在,我发现有时我需要传递关键字参数,这让我开始思考:我应该如何散列 args/kwargs 签名?

我应该根据 str(value) 创建缓存键吗?泡菜?什么最稳健?

对于我的情况,看起来我可以将键/值转换为字符串并将其添加到我的键中......但我现在很好奇一种通用的方法来处理这个问题,比如 arg= [1, 2, 3]

def cached_call(*args, **kwargs):
return cache.get(what_here)
cached_call('hello')
cached_call([1, 2, 3], {'1': True})

最佳答案

这是 functools.lru_cache() 中使用的技术:

kwd_mark = object()     # sentinel for separating args from kwargs

def cached_call(*args, **kwargs):
key = args + (kwd_mark,) + tuple(sorted(kwargs.items()))
return cache.get(key)

请注意,上面的代码处理关键字参数,但没有尝试处理不可散列的值,如列表。您使用 strlist 的想法是一个合理的开始。对于 set 对象,您需要先对条目进行排序,str(sorted(someset))。其他对象可能没有有用的 __repr____str__(即它们可能只显示对象类型和内存中的位置)。总之,处理任意不可散列的参数需要仔细考虑每种对象类型。

关于python - 如何为函数缓存散列 *args **kwargs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220599/

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