Созданный в хеше Python () функция

Windows XP, Python 2.5:

hash('http://stackoverflow.com') Result: 1934711907

Механизм приложения Google (http://shell.appspot.com/):

hash('http://stackoverflow.com') Result: -5768830964305142685

Почему это? Как у меня может быть хеш-функция, которая даст мне те же результаты через различные платформы (Windows, Linux, Mac)?

80
задан Denis T. 8 October 2019 в 13:05
поделиться

3 ответа

Использовать hashlib в качестве hash () предназначен для использования в :

быстро сравнивать ключи словаря во время поиска в словаре

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

55
ответ дан 24 November 2019 в 09:48
поделиться

Как указано в документации, встроенная функция hash () - это , а не , предназначенная для хранения полученных хэшей где-то снаружи. Он используется для предоставления хеш-значения объекта, хранения его в словарях и т. Д. Это также зависит от реализации (GAE использует модифицированную версию Python). Посмотрите:

>>> class Foo:
...     pass
... 
>>> a = Foo()
>>> b = Foo()
>>> hash(a), hash(b)
(-1210747828, -1210747892)

Как вы можете видеть, они разные, поскольку hash () использует метод объекта __ hash __ вместо «обычных» алгоритмов хеширования, таких как SHA.

Учитывая вышеизложенное, рациональное выбор - использовать модуль hashlib .

88
ответ дан 24 November 2019 в 09:48
поделиться

Вероятно, он просто запрашивает функцию, предоставленную операционной системой, а не собственный алгоритм.

Как написано в других комментариях, используйте hashlib или напишите свою собственную хеш-функцию.

-3
ответ дан 24 November 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: