我最近尝试下面的命令在Python:为什么以及如何Python函数可散列?
>>> {lambda x: 1: 'a'}
{<function __main__.<lambda>>: 'a'}
>>> def p(x): return 1
>>> {p: 'a'}
{<function __main__.p>: 'a'}
两个dict
创作的成功表明,这两个拉姆达和常规功能是可哈希。 (类似于{[]: 'a'}
因TypeError: unhashable type: 'list'
而失败)。
哈希显然不一定函数的ID:
>>> m = lambda x: 1
>>> id(m)
140643045241584
>>> hash(m)
8790190327599
>>> m.__hash__()
8790190327599
最后命令显示__hash__
方法为lambda
S,即明确地定义的,这不是一些自动魔法事情的Python计算基于方式。
使函数变得可排序的动机是什么?对于奖金,函数的散列是什么?
我真的觉得这是哪门子的问题,你有一个好的* *回答之前,你不应该考虑“为什么不呢?” – Hurkyl
@Hyrkyl。因为它需要增加额外的维护负担。有人必须设计和编写'__hash__'函数,所以他们清楚地看到了它的好处。我想知道是什么让他们不是孤单一人。 –
尽管给出了答案,但似乎禁用哈希函数将需要更多的工作,而不仅仅是从对象继承它。所以实际上其中一个考虑因素可能是维护债务的减少。 –