做自(zì)由與創造的先行者

Types: 10. memoryview type

Python開(kāi)發手冊

10. memoryview type

2.7版本的新功能(néng)。

memoryview對(duì)象允許Python代碼訪問支持緩沖協議(yì)的對(duì)象的内部數據,而無需複制。内存通常被解釋爲簡單的字節。

class memoryview(obj)

創建一個memoryview引用(yòng)obj。obj必須支持緩沖區(qū)協議(yì)。支持緩沖協議(yì)的内置對(duì)象包括str和(hé)bytearray(但(dàn)不unicode)。

A memoryview具有元素的概念,元素是由原始對(duì)象obj處理(lǐ)的原子内存單元。對(duì)于許多簡單的類型(如str和(hé))bytearray,元素是單個字節,但(dàn)其他(tā)第三方類型可能(néng)會(huì)暴露更大(dà)的元素。

len(view)返回内存視(shì)圖中元素的總數,視(shì)圖。該itemsize屬性将爲您提供單個元素中的字節數。

memoryview支持切片以顯示其數據。采用(yòng)單個索引将返回一個元素作(zuò)爲str對(duì)象。全切片将導緻子視(shì)圖:

>>> v = memoryview('abcefg')

>>> v[1]

'b'

>>> v[-1]

'g'

>>> v[1:4]

>>> v[1:4].tobytes()

'bce'

複制

如果memoryview結束的對(duì)象支持更改其數據,則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 "", line 1, in

ValueError: cannot modify size of memoryview object

複制

注意memoryview對(duì)象的大(dà)小(xiǎo)不能(néng)被改變。

memoryview 有兩種方法:

tobytes()

将緩沖區(qū)中的數據作(zuò)爲字符串(類的對(duì)象str)返回。

>>> m = memoryview("abc")

>>> m.tobytes()

'abc'

複制

tolist()

将緩沖區(qū)中的數據作(zuò)爲整數列表返回。

>>> memoryview("abc").tolist()

[97, 98, 99]

複制

還有幾個隻讀屬性可用(yòng):

format

包含struct視(shì)圖中每個元素的格式(模塊樣式)的字符串。這(zhè)默認爲'B'一個簡單的字節串。

itemsize

内存視(shì)圖的每個元素的大(dà)小(xiǎo)(以字節爲單位)。

shape

一個整數元組,ndim表示将存儲器的形狀作(zuò)爲一個N維數組的長度。

ndim

一個整數,指示内存所代表的多維數組的維數。

strides

整數元組的長度,ndim以字節爲單位給出數組中每個元素的每個元素的長度。

readonly

指示内存是否隻讀的布爾值。

網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發
下(xià)一篇:Types: 11. Context Manager Types
上(shàng)一篇:Types: 9. File Objects