3

Python 2.7 文档对 hashlib 哈希器有这样的说法:

hash.update(arg)

    Update the hash object with the string arg. [...]

但是我看到人们给它提供不是字符串的对象,例如buffersnumpy ndarrays

鉴于 Python 的鸭子类型,我对可以指定非字符串参数并不感到惊讶。

问题是:我怎么知道哈希器对论点做了正确的事情

我无法想象哈希器天真地对参数进行浅层迭代,因为对于具有多个维度的 ndarray,这可能会失败 - 如果你进行浅层迭代,你会得到一个 n-1 维度的 ndarray。

4

1 回答 1

2

updates#使用格式规范解包其参数。这意味着它可以是字符串、Unicode或缓冲区接口

您不能在纯 Python 中定义缓冲区接口,但像 numpy 这样的 C 库可以并且可以 - 这允许将它们传递到hash.update.

诸如多维数组之类的东西可以正常工作-在 C 级别上,它们存储为连续的字节序列。

于 2015-05-15T09:55:04.377 回答