Python memoryview() 函数



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

示例:使用 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')

示例:带有 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]