不确定我为什么找不到它,但是下面是什么意思?
hashvalue_byte_size = len(bytes(np.int64(42).data))
从左到右,我通常会说这描述了np.int64(42).data中的字节长度。
所以字节长度是8。
我认为'np.int64()'表示(-9223372036854775808至9223372036854775807)中的整数或(0至18446744073709551615)中的无符号整数
还是前缀'np'使int64()变成了其他东西?
最后,“ 42”代表什么? .data是什么意思?
答案 0 :(得分:1)
从内到外解析这样的表达式是最有意义的:
In [189]: np.int64(42)
Out[189]: 42
In [190]: type(_)
Out[190]: numpy.int64
In [191]: np.int64(42).data
Out[191]: <memory at 0x7f7dc41a82e8>
In [192]: type(_)
Out[192]: memoryview
In [193]: np.int64(42)
Out[193]: 42
In [194]: type(_)
Out[194]: numpy.int64
In [195]: np.int64(42).data
Out[195]: <memory at 0x7f7dcc05cac8>
In [196]: type(_)
Out[196]: memoryview
In [197]: bytes(np.int64(42).data)
Out[197]: b'*\x00\x00\x00\x00\x00\x00\x00'
In [198]: len(_)
Out[198]: 8
看一个具有一个或多个元素的numpy数组可能更有意义:
In [204]: np.array(42)
Out[204]: array(42)
In [205]: _.dtype
Out[205]: dtype('int64')
In [206]: np.array(42).data
Out[206]: <memory at 0x7f7dcc054780>
In [207]: bytes(np.array(42).data)
Out[207]: b'*\x00\x00\x00\x00\x00\x00\x00'
In [208]: bytes(np.array([42,43]).data)
Out[208]: b'*\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00'
该数组对象具有属性和一个databuffer
。该缓冲区存储数据,在这种情况下,每个元素为8字节整数。 bytes(...data)
只是生成该缓冲区的字节串表示。
与tobytes
方法相同:
In [209]: np.array([42,43]).tobytes()
Out[209]: b'*\x00\x00\x00\x00\x00\x00\x00+\x00\x00\x00\x00\x00\x00\x00'
答案 1 :(得分:1)
当尝试破译这种表达式时,不应从左到右,而应从内到外。如下所示,前两个语句定义了一个numpy.int64对象,该对象的值为42。这意味着42作为64位整数保存在内存中。下一个调用将为您提供对象的内存地址。紧接着,我认为您会以我不知道的语言表达您的内存地址内容。最后一个简单地给出了分配给内存地址的字节数。这是8,因为您已经为64位整数(1字节= 8位)分配了空间。
import numpy
print(numpy.int64(42))
# 42
print(type(numpy.int64(42)))
# <class 'numpy.int64'>
print(numpy.int64(42).data)
# <memory at 0x7f5e43221588>
print(bytes(numpy.int64(42).data))
# b'*\x00\x00\x00\x00\x00\x00\x00'
print(len(bytes(numpy.int64(42).data)))
# 8