轉(zhuǎn)載須注明出處:簡(jiǎn)書@Orca_J35 | GitHub@orca-j35,所有筆記均托管于 python_notes 倉(cāng)庫(kù)
相關(guān)筆記:
- 『二進(jìn)制序列類型(bytes, bytearray, memoryview)』-> Memory Views
??class memoryview(obj)
該函數(shù)會(huì)創(chuàng)建一個(gè)引用自 obj 的內(nèi)存視圖(memoryview)對(duì)象。內(nèi)存視圖對(duì)象允許 Python 代碼訪問(wèn)支持緩沖區(qū)協(xié)議(buffer protocol)的對(duì)象的內(nèi)部數(shù)據(jù),且無(wú)需拷貝。
obj 必須支持緩沖區(qū)協(xié)議(buffer protocol)。支持緩沖區(qū)協(xié)議的內(nèi)置對(duì)象有 bytes 和 bytearray。bytes 和 bytearray 由 memoryview 提供支持,內(nèi)存視圖使用緩沖區(qū)協(xié)議(buffer protocol)訪問(wèn)來(lái)訪問(wèn)其它二進(jìn)制對(duì)象的內(nèi)存,且無(wú)需拷貝。
示例 - 使用內(nèi)存視圖對(duì)象修改一個(gè)短整型有符號(hào)整數(shù)數(shù)組的數(shù)據(jù)。
from array import array
numbers = array('h', [-2, -1, 0, 1, 2]) # 'h'表示signed short
memv = memoryview(numbers)
len(memv) #> 5
# 轉(zhuǎn)換成列表形式
memv.tolist() #> [-2, -1, 0, 1, 2]
# 轉(zhuǎn)換成無(wú)符號(hào)字符類型
memv_oct = memv.cast('B')
memv_oct.tolist() #> [254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
# 修改第3個(gè)元素的高位字段
memv_oct[5] = 4
numbers #> array('h', [-2, -1, 1024, 1, 2])