Python 中的緩衝區
在 Python 中,buffer
型別物件用於以面向位元組的格式顯示給定物件的內部資料。Python 對緩衝區的主要用途是儲存和操作巨大的資料陣列並在不建立副本的情況下處理它們。
buffer
介面僅受 strings
、Unicode
、arrays
和 bytearrays
支援。numpy
陣列也在後臺使用此介面。
我們可以在相同的 buffer
例項上工作,而無需使用 buffer
介面建立資料副本。
import numpy as np
arr = np.array([1,2,3])
arr2 = np.asarray(arr)
arr2[2] = 50
print(arr, arr2)
輸出:
[ 1 2 50] [ 1 2 50]
在上面的例子中,我們建立了一個名為 arr
的 numpy
陣列,並使用它建立另一個名為 arr2
的陣列。
因為 numpy
模組支援緩衝區協議,並且使用陣列的檢視傳送資料而不是生成新陣列,所以更新陣列 arr2
也會更新原始 arr
。
讓我們使用 buffer()
和 memoryview()
函式在支援的物件上實現這個介面。
在 Python 中使用 buffer()
函式實現 Buffer 介面
使用 buffer()
函式,我們可以返回給定物件的支援緩衝區介面的只讀檢視物件(strings
、arrays
、bytes
、Unicode
、bytesarray
)。它在處理龐大的資料陣列時很有用,因為它消除了複製資料。
例子:
a = 'Sample String'
bf = buffer(a, 2, 5)
print bf, type(bf)
輸出:
mple <type 'buffer'>
我們在上面的例子中建立了一個 buffer
型別的物件。該物件返回字串 a
的檢視。
但是,memoryview()
函式取代了 Python 3 中的 buffer()
函式。Python 2.7 支援這兩個函式。
在 Python 中使用 memoryview()
函式實現緩衝區介面
在 Python 3 中,memoryview()
函式用於返回實現 buffer
介面的 memoryview
物件並建立支援該介面的物件的檢視。
memoryview()
接受位元組類物件並返回其檢視。在列印時,它會顯示原始物件的記憶體位置。
a = bytearray('Sample Bytes', 'utf-8')
m = memoryview(a)
print(m[2], type(m), m)
輸出:
109 <class 'memoryview'> <memory at 0x7f83f2d5f940>
在上面的例子中,我們建立了一個編碼的 bytesarray
物件的 memoryview
物件。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn