2015-05-15 2 views
3

The Python 2.7 documentation имеет это сказать о hashlib hashers:Как именно хеш-листы хешлиба рассматривают ввод?

hash.update(arg) 

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

Но я видел людей, кормить его объекты, которые не являются строками, например, buffers, numpy ndarrays.

Учитывая, что утиная утиная Python, я не удивлен, что можно указать , чтобы указать нестроковые аргументы.

Вопрос в следующем: откуда я знаю, что хешер Правильная вещь с аргументом?

Я не могу представить, чтобы хэшир наивно выполнял мелкую итерацию аргумента, потому что это, вероятно, потерпит неудачу с ndarrays с более чем одним измерением - если вы сделаете мелкую итерацию, вы получите ndarray с n-1 измерениями.

ответ

2

update распаковывает свои аргументы, используя s# format spec. Это означает, что это может быть строка, Unicode или буферный интерфейс.

Вы не можете определить a buffer interface в чистом Python, но библиотеки C, такие как numpy, могут и делать - что позволяет им переходить в hash.update.

Такие вещи, как многомерные массивы, отлично работают - на уровне C они сохраняются как непрерывная серия байтов.

+0

Многомерные массивы из numpy могут работать, но считается ли это «прекрасным» или не зависит от того, гарантируют ли ваше приложение и библиотеки, например numpy, точное расположение макетов данных, которые он представляет через буферный интерфейс , Будет ли всегда одно и то же? Упорядочено строками или столбцами? В каком формате находятся байты массива больших значений, хранящихся в? и т. д. Убедитесь, что они всегда одинаковы, прежде чем вы получите что-то иное, чем очевидную линейную последовательность байтов. – gps

 Смежные вопросы

  • Нет связанных вопросов^_^