Python memoryview() 函式



Python memoryview() 函式是一個內建函式,用於從指定物件獲取“記憶體檢視”物件。此物件允許我們訪問任何其他物件的內部資料,而無需複製資料。但唯一的條件是給定的物件必須支援緩衝區協議。

當我們處理大型資料集時,與其複製資料(這會消耗更多資源),memoryview() 函式直接操作現有資料,這有助於提高效率,節省時間和記憶體。

語法

Python memoryview() 函式的語法如下所示:

memoryview(object)

引數

Python memoryview() 函式接受單個引數:

  • object - 此引數表示 bytes 物件或 bytearray 物件。

返回值

Python memoryview() 函式返回指定物件的 memoryview 物件。

memoryview() 函式示例

練習以下示例以瞭解如何在 Python 中使用 memoryview() 函式

示例:memoryview() 函式的使用

memoryview() 函式適用於支援緩衝區協議的物件。如果向此函式傳遞不合適的物件,它將返回“TypeError”。在下面的程式碼中,我們傳遞了一個不支援緩衝區協議的列表。因此,我們將遇到 TypeError。

numericList = [29, 28, 27, 26, 25]
memView = memoryview(numericList)
print("The memory view of given list:")
print(memView) 

以下是上述程式碼的輸出:

TypeError: memoryview: a bytes-like object is required, not 'list'

示例:使用 memoryview() 將位元組陣列轉換為記憶體檢視

在此示例中,我們使用 Python memoryview() 函式將 Bytearray 轉換為 Memoryview 物件。然後我們顯示該物件的第一個元素。

byteArray = bytearray("TUTORIALSPOINT", "utf-8")
mmviewOfArr = memoryview(byteArray)
print("Accessing the first element of memoryview:")
print(mmviewOfArr[0])

執行上述程式時,將產生以下結果:

Accessing the first element of memoryview:
84

示例:使用 memoryview() 修改位元組陣列

我們還可以透過 memoryview() 函式修改給定的位元組陣列。在下面的程式碼中,定義了一個 bytearray,並使用其索引修改前三個字元的值。

byteArray = bytearray("TUTORIALSPOINT", "utf-8")
mmviewOfArr = memoryview(byteArray)
print("Orginal element of memoryview:", byteArray)
mmviewOfArr[0] = 116
mmviewOfArr[1] = 117
mmviewOfArr[2] = 116
print("After modifying the memoryview:", byteArray)

以下是上述程式碼的輸出:

Orginal element of memoryview: bytearray(b'TUTORIALSPOINT')
After modifying the memoryview: bytearray(b'tutORIALSPOINT')

示例:使用 memoryview() 函式的 NumPy 陣列

由於NumPy支援緩衝區協議,因此它與memoryview()函式相容。在下面的Python程式碼中,我們建立了一個NumPy陣列,並顯示該陣列的最後三個元素。

import numpy as np
newnpArr = np.array([29, 28, 27, 26, 25])
memView = memoryview(newnpArr)
print("The last three elements of array:")
print(memView[2:5].tolist())  

上述程式碼的輸出如下:

The last three elements of array:
[27, 26, 25]
python_built_in_functions.htm
廣告