当实现具有多个属性的类时(例如下面的玩具示例),处理哈希的最佳方法是什么?
我认为__eq__
和__hash__
应该是一致的,但是如何实现能够处理所有属性的适当的哈希函数呢?
class AClass:
def __init__(self):
self.a = None
self.b = None
def __eq__(self, other):
return other and self.a == other.a and self.b == other.b
def __ne__(self, other):
return not self.__eq__(other)
def __hash__(self):
return hash((self.a, self.b))
__hash__
对于相等的对象应返回相同的值。它也不应在对象的整个生命周期内发生变化。通常,您只为不可变的对象实现它。
一个简单的实现就是公正return 0
。这始终是正确的,但效果很差。
您的解决方案,返回一个属性元组的哈希,是很好的。但是请注意,您无需列出__eq__
在元组中进行比较的所有属性。如果某些属性对于不相等的对象通常具有相同的值,则将其省略。不要使散列计算的成本超出其所需的成本。
编辑:我建议一般不要使用xor混合哈希。当两个不同的属性具有相同的值时,它们将具有相同的哈希值,并且通过xor进行相互抵消。元组使用更复杂的计算来混合哈希,请参见tuplehash
中的tupleobject.c
。
从Udacity的深度学习类来看,y_i的软最大值只是指数除以整个Y向量的指数之和: 其中< code>S(y_i)是< code>y_i的softmax函数,而< code>e是指数,而< code>j是输入向量y中的列数 我尝试了以下方法: 返回: 但建议的解决方案是: 它产生与第一个实现相同的输出,即使第一个实现显式地取每列和max的差值,然后除以总和。 有人能用数学说明为什么吗?一个正确,
问题内容: 我们中的许多人都需要处理用户输入,搜索查询以及输入文本可能包含亵渎或不受欢迎语言的情况。通常,这需要过滤掉。 在哪里可以找到各种语言和方言的咒骂单词的好清单? 是否有API可供包含良好列表的来源使用?还是仅使用某些参数简单地说“是的干净”或“没有这个脏”的API? 有什么好的方法可以捕获试图欺骗系统的人员,例如a $$,azz或a55? 如果您提供PHP解决方案,则可以加分。:) 编辑
问题内容: 我经常使用时髦的东西作为字典的键,因此,我想知道什么是正确的方法-这是通过为对象实现良好的哈希方法实现的。我知道这里提出的其他问题[是实现 hash的好方法,但我想了解默认值如何用于自定义对象,以及是否有可能依赖它。 我注意到可变项显然是不可哈希的,因为会引发错误……但是奇怪的是,自定义类是可哈希的: 那么,有人知道此默认哈希函数如何工作吗?通过了解这一点,我想知道: 如果我放置与字典
问题内容: 我以前的编程中,代码段仅用于调试目的(记录命令等)。通过使用预处理程序指令,可以完全禁用这些语句以进行生产,如下所示: 做类似的事情的最好方法是什么? 问题答案: 如果只想禁用日志记录方法,请使用该模块。如果日志级别设置为排除调试语句,那么它将非常接近无操作(它仅检查日志级别并返回而不插入日志字符串)。 如果要在特定条件下以字节码编译时实际删除代码块,则唯一的选择是相当神秘的全局变量。
我刚开始使用OpenNLP。我需要创建一个简单的训练模型来识别名称实体。