[英]__hash__ method and documentation. Probable error?
阅读文档
object.__hash__(self)
由内置函数
hash()
调用,并用于对哈希集合的成员(包括set,Frozenset和dicthash()
进行操作。 [...]
和....
Python的所有不可变内置对象都是可哈希的,而没有可变容器(例如list或dictionaries )是可哈希的。
从控制台:
>>> a = {'name': 'abcdef'}
>>> hash(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
通过这种方式,我了解到dict对象是不可哈希的,那么为什么文档说我可以在dict对象上调用哈希函数?
由内置函数hash()调用,用于散列集合的成员 (包括set,frozenset和dict)上的操作。 [...]
__hash__
在集合成员(或键)上调用,而不在集合本身上调用。
您误读了文档。
内置函数hash()
可以对 object.__hash__
进行[c]处理,并且可以对散列集合的成员(包括set,frozenset和dict hash()
进行操作。
__hash__
不在 dict
调用。 它被称为dict
成员 。
演示:
>>> class Hashable(object):
... def __hash__(self):
... print '__hash__ was called'
... return super(Hashable, self).__hash__()
...
>>> {Hashable(): None}
__hash__ was called
{<__main__.Hashable object at 0x10bce7750>: None}
由于Hashable()
实例用作键, __hash__
在创建字典时将调用其__hash__
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.