繁体   English   中英

__hash__方法和文档。 可能的错误?

[英]__hash__ method and documentation. Probable error?

阅读文档

object.__hash__(self)

由内置函数hash()调用,并用于对哈希集合的成员(包括set,Frozenset和dict hash()进行操作。 [...]

和....

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM