我最近嘗試下面的命令在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__'函數,所以他們清楚地看到了它的好處。我想知道是什麼讓他們不是孤單一人。 –
儘管給出了答案,但似乎禁用哈希函數將需要更多的工作,而不僅僅是從對象繼承它。所以實際上其中一個考慮因素可能是維護債務的減少。 –