Types: 10. memoryview type

10. memoryview type

2.7版本的新功能。

memoryview对象允许Python代码访问支持缓冲协议的对象的内部数据,而无需复制。内存通常被解释为简单的字节。

class memoryview(obj)

创建一个memoryview引用objobj必须支持缓冲区协议。支持缓冲协议的内置对象包括strbytearray(但不unicode)。

A memoryview具有元素的概念,元素是由原始对象obj处理的原子内存单元。对于许多简单的类型(如str和)bytearray元素是单个字节,但其他第三方类型可能会暴露更大的元素

len(view)返回内存视图中元素的总数,视图。该itemsize属性将为您提供单个元素中的字节数。

memoryview支持切片以显示其数据。采用单个索引将返回一个元素作为str对象。全切片将导致子视图:

>>> v = memoryview('abcefg') >>> v[1] 'b' >>> v[-1] 'g' >>> v[1:4] <memory at 0x77ab28> >>> v[1:4].tobytes() 'bce'

如果memoryview结束的对象支持更改其数据,则memoryview支持片分配:

>>> data = bytearray('abcefg') >>> v = memoryview(data) >>> v.readonly False >>> v[0] = 'z' >>> data bytearray(b'zbcefg') >>> v[1:4] = '123' >>> data bytearray(b'z123fg') >>> v[2] = 'spam' Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: cannot modify size of memoryview object

注意memoryview对象的大小不能被改变。

memoryview 有两种方法:

tobytes()

将缓冲区中的数据作为字符串(类的对象str)返回。

>>> m = memoryview("abc") >>> m.tobytes() 'abc'

tolist()

将缓冲区中的数据作为整数列表返回。

>>> memoryview("abc").tolist() [97, 98, 99]

还有几个只读属性可用:

format

包含struct视图中每个元素的格式(模块样式)的字符串。这默认为'B'一个简单的字节串。

itemsize

内存视图的每个元素的大小(以字节为单位)。

shape

一个整数元组,ndim表示将存储器的形状作为一个N维数组的长度。

ndim

一个整数,指示内存所代表的多维数组的维数。

strides

整数元组的长度,ndim以字节为单位给出数组中每个元素的每个元素的长度。

readonly

指示内存是否只读的布尔值。