首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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对象。全切片将导致子视图:

代码语言:javascript
复制
>>> v = memoryview('abcefg')
>>> v[1]
'b'
>>> v[-1]
'g'
>>> v[1:4]
<memory at 0x77ab28>
>>> v[1:4].tobytes()
'bce'

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

代码语言:javascript
复制
>>> 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)返回。

代码语言:javascript
复制
>>> m = memoryview("abc")
>>> m.tobytes()
'abc'

tolist()

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

代码语言:javascript
复制
>>> memoryview("abc").tolist()
[97, 98, 99]

还有几个只读属性可用:

format

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

itemsize

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

shape

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

ndim

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

strides

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

readonly

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

扫码关注腾讯云开发者

领取腾讯云代金券