Python memoryview() 函数是一个内置函数,用于从指定对象获取 “memory view” 对象。此对象允许我们访问任何其他对象的内部数据,而无需复制数据。但唯一的条件是给定的对象必须支持 buffer 协议。
当我们处理大型数据集时,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("qikepu", "utf-8")
mmviewOfArr = memoryview(byteArray)
print("Accessing the first element of memoryview:")
print(mmviewOfArr[0])
当我们运行上述程序时,它会产生以下结果——
Accessing the first element of memoryview:
84
84
示例:使用 memoryview() 修改字节数组
我们还可以通过 memoryview() 函数修改给定的字节数组。在下面的代码中,定义了一个字节数组,通过使用它的索引,我们修改了前三个字符的值。
byteArray = bytearray("qikepu", "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'qikepu')
After modifying the memoryview: bytearray(b'qikepu')
After modifying the memoryview: bytearray(b'qikepu')
示例:带有 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]
[27, 26, 25]