gpt4 book ai didi

python - 如何制作索引不可知的二元组?

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:53 26 4
gpt4 key购买 nike

我正在实现一个带有 2 个参数的函数并缓存结果以提高性能(“记忆化”技术)。但是我在缓存功能中看到了重复。例如:

@memoize
def fn(a,b):
#do something.

问题是我事先知道fn(a,b) == fn(b,a),所以我希望它理解参数元组(a ,b) 在这种情况下等同于 (b,a),但此函数目前将它们缓存为 2 个单独的条目。

我是否需要为此目的创建一个新类,还是有其他更优雅的方法?虽然我知道我可以为两个元组缓存相同的函数返回值,但我真的很想知道如何实现“索引不可知”元组。

这个内存代码只是一个例子,我希望我的元组对象非常通用,也可以在其他情况下使用。

最佳答案

您可以将其拆分为两个函数。公共(public)函数以任何顺序接受参数,并调用一个内部函数,并将参数排序。内部函数是带缓存的。

def fn(*args):
return cached_fn(*sorted(args))

@memoize
def cached_fn(*args)
# do something

这是一个时空权衡——有一些额外的函数调用是为了将缓存的大小减半。希望您没有带有很长参数列表的函数,因此排序不应增加太多开销。

此解决方案要求参数的数据类型具有比较功能,以便对它们进行排序。如果没有这样的先决条件,我想不出一种通用的方式来写这个。在处理某些类型时,您可以设计一种自定义方法来规范化订单。或者您可以在缓存中使用您自己的哈希函数,并使其与顺序无关。

关于python - 如何制作索引不可知的二元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54097140/

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