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