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 "
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)發