當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。