做(zuò)自(zì)由與創造的先行(xíng)者

Types: 10. memoryview type

Python開(kāi)發手冊

10. memoryview type

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

memoryview對象允許Python代碼訪問(wèn)支持緩沖協議(yì)的對象的內(nèi)部數(shù)據,而無需複制。內(nèi)存通(tōng)常被解釋為(wèi)簡單的字節。

class memoryview(obj)

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

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

len(view)返回內(nèi)存視(shì)圖中元素的總數(shù),視(shì)圖。該itemsize屬性将為(wèi)您提供單個元素中的字節數(shù)。

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

>>> v = memoryview('abcefg')

>>> v[1]

'b'

>>> v[-1]

'g'

>>> v[1:4]

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

'bce'

複制

如(rú)果memoryview結束的對象支持更改其數(shù)據,則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對象的大小不能(néng)被改變。

memoryview 有兩種方法:

tobytes()

将緩沖區(qū)中的數(shù)據作(zuò)為(wèi)字符串(類的對象str)返回。

>>> m = memoryview("abc")

>>> m.tobytes()

'abc'

複制

tolist()

将緩沖區(qū)中的數(shù)據作(zuò)為(wèi)整數(shù)列表返回。

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

[97, 98, 99]

複制

還有幾個隻讀屬性可(kě)用:

format

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

itemsize

內(nèi)存視(shì)圖的每個元素的大小(以字節為(wèi)單位)。

shape

一(yī)個整數(shù)元組,ndim表示将存儲器的形狀作(zuò)為(wèi)一(yī)個N維數(shù)組的長(cháng)度。

ndim

一(yī)個整數(shù),指示內(nèi)存所代表的多維數(shù)組的維數(shù)。

strides

整數(shù)元組的長(cháng)度,ndim以字節為(wèi)單位給出數(shù)組中每個元素的每個元素的長(cháng)度。

readonly

指示內(nèi)存是否隻讀的布爾值。

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