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]
>>> 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 "
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
指示内存是否只读的布尔值。
网站建设开发|APP设计开发|小程序建设开发