Récemment, j'ai essayé les commandes suivantes en Python:
>>> {lambda x: 1: 'a'}
{<function __main__.<lambda>>: 'a'}
>>> def p(x): return 1
>>> {p: 'a'}
{<function __main__.p>: 'a'}
Le succès de ces deux dict
créations indique que les deux lambda et des fonctions classiques sont hashable. (Quelque chose comme {[]: 'a'}
d'échec avec TypeError: unhashable type: 'list'
).
Le hachage est apparemment pas nécessairement l'ID de la fonction:
>>> m = lambda x: 1
>>> id(m)
140643045241584
>>> hash(m)
8790190327599
>>> m.__hash__()
8790190327599
La dernière commande montre que l' __hash__
méthode est explicitement définie pour lambda
s, c'est à dire, ce n'est pas quelque automagical chose Python calcule en fonction du type.
Quelle est la motivation derrière fonctions de prise de hashable? Pour un bonus, qu'est-ce que la valeur de hachage d'une fonction?