当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python memoryview()用法及代码示例


为什么我们使用memoryview()函数?
因为内存视图是在Python中公开缓冲区协议的安全方法,并且内存视图在许多有用的上下文中的行为类似于字节(例如,它支持映射协议),所以如果谨慎使用它可以提供足够的替代方法。伟大的事情是它使用了底层的缓冲协议来避免复制,而只是弄乱了指向数据的指针。

因此,在进入哪种内存视图之前,我们需要首先了解缓冲区协议。

缓冲协议:Buffer协议提供了一种访问对象内部数据的方法。该内部数据是存储器阵列或缓冲区。它允许一个对象公开其内部数据(缓冲区),而另一个对象无需中间复制即可访问这些缓冲区。
我们只能在C-API级别访问缓冲区协议,而不能使用我们的常规代码库。因此,要将相同的协议公开给普通的Python代码库,则提供内存视图。



内存视图:memoryview对象允许Python代码无需复制即可访问支持缓冲区协议的对象的内部数据。
memoryview()函数允许直接读取和写入对象的面向字节的数据,而无需先复制它。由于在切片时不会创建副本,因此在处理大型对象时可以提高性能。

用法:

memoryview(obj)
参数:
obj - object whose internal data is to be exposed.
supporting buffer protocol - str and bytearray (but not unicode).

返回值:
Returns a memoryview object.
# Python program to illustrate 
# Modifying internal data using memory view 
  
# random bytearray 
byte_array = bytearray('XYZ', 'utf-8') 
print('Before update:', byte_array) 
  
mem_view = memoryview(byte_array) 
  
# update 2nd index of mem_view to J  
mem_view[2]= 74
print('After update:', byte_array)

输出:

Before update:bytearray(b'XYZ')
After update:bytearray(b'XYJ')

说明我们如何在上述程序中修改内部数据:在这里,我们将内存视图的第二个索引更新为ASCII值74(J)。在此内存视图对象中,mem_view引用相同的缓冲区或内存,并更新mem_view中的索引,并且还更新byte_array。

缓冲协议和内存视图的重要性

通过使用缓冲区协议,我们可以处理大型数据,就像我们要处理图像的二进制数据一样。缓冲区协议,可以创建另一个对象访问来修改大数据而无需复制它。这使程序使用更少的内存并提高了执行速度。




相关用法


注:本文由纯净天空筛选整理自Shivani Ghughtyal大神的英文原创作品 memoryview() in Python。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。