Types: 10. memoryview type
10. memoryview type
2.7版本的新功能。
memoryview
对象允许Python代码访问支持缓冲协议的对象的内部数据,而无需复制。内存通常被解释为简单的字节。
class memoryview(obj)
创建一个memoryview
引用obj
。obj
必须支持缓冲区协议。支持缓冲协议的内置对象包括str
和bytearray
(但不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
指示内存是否只读的布尔值。