2010-06-25 25 views
2

我在Python中有一個散列函數。 它返回一個值。Python中的字節精度值?

如何查看此返回值的字節大小?我想知道它是4字節還是8字節或什麼。

原因:

  • 我想確保的最小值爲0,最大值爲2 ** 32,否則我的計算是不正確的。
  • 我想確保將它打包到I結構(無符號整數)是正確的。

更具體地說,我打電話給murmur.string_hash(`x`)。 我想知道健康檢查,我得到一個4字節的無符號返回值。如果我有一個不同大小的值,他們的計算會搞砸。所以我想要理智檢查它。

+0

不是*確切*重複,但在這裏看到:[如何確定在python中的對象的大小](http://stackoverflow.com/questions/449560/how-do-i-determine-the- Python中的對象大小) – Randolpho 2010-06-25 19:34:35

+0

定義「字節大小」 – 2010-06-25 19:35:04

+1

簡短回答:[sys.getsizeof](http://docs.python.org/library/sys.html#sys.getsizeof) – Randolpho 2010-06-25 19:35:28

回答

1

如果它是一個返回數的任意函數,只有4 standard types of numbers in Python:小整數(C長,至少 32位),長整型(「無限」的精度),漂浮物(C雙鍵),和複數字。

如果你指的是builtin hash,它返回一個標準的整數(C長):如果你想不同的散列

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

,退房hashlib

1

通常,在Python中將返回值視爲特定的字節精度並不是最好的選擇,尤其是對於整數。對於大多數意圖和目的,Python「短」整數與「長」(無限)整數無縫集成。根據需要將變量從較小的類型提升到較大的類型以保持所需的值。函數不需要返回任何特定類型(例如,相同的函數可能會根據輸入返回不同的數據類型)。

當一個函數是由第三方包提供的(就像這個一樣),你可以直接相信文檔(據我所知Murmur表示4字節整數)或者測試返回值自己在使用之前(無論是通過if,assert還是try,取決於您的偏好)。