Байт точность значения в Python? - PullRequest
2 голосов
/ 25 июня 2010

У меня есть хеш-функция в Python.Возвращает значение.

Как узнать размер этого возвращаемого значения в байтах?Я хочу знать, если это 4 байта или 8 или что.

Причина:

  • Я хочу убедиться, что минимальное значение равно 0, а максимальное значение равно 2 ** 32, в противном случае мои вычисления неверны.
  • Я хочу убедиться, что упаковка в структуру I (unsigned int) является правильной.

Более конкретно, я звоню murmur.string_hash(`x`).Я хочу знать здравый смысл, что я получаю 4-байтовое возвращаемое значение без знака.Если у меня есть значение другого размера, мои вычисления будут испорчены.Поэтому я хочу, чтобы здравый смысл проверил это.

Ответы [ 2 ]

1 голос
/ 26 июня 2010

Вообще, думать о возвращаемом значении как о конкретной точности байтов в Python не лучший путь, особенно с целыми числами. В большинстве случаев «короткие» целые числа Python легко интегрируются с «длинными» (неограниченными) целыми числами. Переменные повышаются от меньшего к большему типу по мере необходимости, чтобы содержать требуемое значение. Функции не обязаны возвращать какой-либо конкретный тип (например, одна и та же функция может возвращать разные типы данных в зависимости от ввода).

Когда функция предоставляется сторонним пакетом (как этот), вы можете либо просто довериться документации (которая, насколько я могу судить, для Murmur указывает 4-байтовые числа), либо проверить возвращаемое значение самостоятельно перед его использованием (if, assert или try, в зависимости от ваших предпочтений).

1 голос
/ 25 июня 2010

Если это произвольная функция, которая возвращает число, в Python есть только 4 стандартных типа чисел : маленькие целые числа (C long, не менее 32 бит), длинные целые («Неограниченная» точность), числа с плавающей запятой (C double) и комплексные числа.

Если вы имеете в виду встроенную 1008 *, она возвращает стандартное целое число (длинная C):

 >>> hash(2**31)
 -2147483648

Если вам нужны другие хэши, проверьте hashlib.

...