【发布时间】:2016-03-04 02:07:17
【问题描述】:
我正在尝试获取 lambda 函数的哈希值。为什么我会得到两个值(8746164008739 和 -9223363290690767077)?为什么 lambda 函数的哈希值并不总是一个值?
>>> fn = lambda: 1
>>> hash(fn)
-9223363290690767077
>>> fn = lambda: 1
>>> hash(fn)
8746164008739
>>> fn = lambda: 1
>>> hash(fn)
-9223363290690767077
>>> fn = lambda: 1
>>> hash(fn)
8746164008739
>>> fn = lambda: 1
>>> hash(fn)
-9223363290690767077
【问题讨论】:
-
为了清楚起见,您确实意识到您正在散列实际的函数对象本身,而不是散列调用时返回的值,对吧?
-
这可能是个坏主意,但您可以考虑代码对象:
hash((lambda : 1).__code__) -
只是好奇...您需要此功能用于什么用途的模型?您是否经常根据任意函数在字典中查找内容?
-
@CorleyBrigman 我可以想象有一个
set()的回调,并希望它不会两次保持相同的回调。 -
另一种情况是持久记忆 - 假设您想将给定输入的长时间运行函数的结果保存到磁盘,以便稍后检索它,您可以使用函数的哈希代码及其输入以引用保存的结果。但正如已经提到的,您确实还必须对所有全局变量和调用函数进行哈希处理才能完美地做到这一点。
标签: python python-2.7 hash lambda