Python memoryview ()

Fungsi memoryview () mengembalikan objek tampilan memori dari argumen yang diberikan.

Sebelum kita membahas apa itu tampilan memori, pertama-tama kita perlu memahami tentang protokol buffer Python.

Protokol Buffer Python

Protokol buffer menyediakan cara untuk mengakses data internal suatu objek. Data internal ini adalah larik memori atau buffer.

Protokol buffer memungkinkan satu objek untuk mengekspos data internalnya (buffer) dan objek lainnya mengakses buffer tersebut tanpa penyalinan perantara.

Protokol ini hanya dapat kami akses pada level C-API dan tidak menggunakan basis kode normal kami.

Jadi, untuk mengekspos protokol yang sama ke basis kode Python normal, tampilan memori hadir.

Apa yang dimaksud dengan tampilan memori?

Tampilan memori adalah cara yang aman untuk mengekspos protokol buffer dengan Python.

Ini memungkinkan Anda untuk mengakses buffer internal suatu objek dengan membuat objek tampilan memori.

Mengapa protokol buffer dan tampilan memori penting?

Kita perlu ingat bahwa setiap kali kita melakukan beberapa tindakan pada suatu objek (memanggil fungsi suatu objek, mengiris array), Python perlu membuat salinan dari objek tersebut .

Jika kita memiliki data yang besar untuk dikerjakan (mis. Data biner dari sebuah gambar), kita tidak perlu membuat salinan dari potongan besar data, yang hampir tidak berguna.

Dengan menggunakan protokol buffer, kita dapat memberikan akses objek lain untuk menggunakan / memodifikasi data besar tanpa menyalinnya. Ini membuat program menggunakan lebih sedikit memori dan meningkatkan kecepatan eksekusi.

Python memoryview () Sintaks

Untuk mengekspos protokol buffer menggunakan memoryview(), kami menggunakan sintaks ini:

 memoryview (obj)

Memoryview () Parameter

The memoryview()fungsi mengambil parameter tunggal:

  • obj - objek yang data internalnya akan diekspos. objharus mendukung protokol buffer (byte, bytearray)

Kembalikan nilai dari memoryview ()

The memoryview()mengembalikan fungsi tampilan memori objek.

Contoh 1: Bagaimana memoryview () bekerja dengan Python?

 #random bytearray random_byte_array = bytearray('ABC', 'utf-8') mv = memoryview(random_byte_array) # access memory view's zeroth index print(mv(0)) # create byte from memory view print(bytes(mv(0:2))) # create list from memory view print(list(mv(0:3)))

Keluaran

 65 b'AB '(65, 66, 67) 

Di sini, kami membuat objek tampilan memori mv dari array byte random_byte_array.

Kemudian, kami mengakses indeks ke-0 mv 'A', dan mencetaknya (yang memberikan nilai ASCII - 65).

Sekali lagi, kami mengakses indeks mv dari 0 dan 1 'AB', dan mengubahnya menjadi byte.

Akhirnya, kami mengakses semua indeks mv dan mengubahnya menjadi daftar. Karena secara internal bytearraymenyimpan nilai ASCII untuk alfabet, hasilnya adalah daftar nilai ASCII dari A, B, dan C.

Contoh 2: Modifikasi data internal menggunakan tampilan memori

 # random bytearray random_byte_array = bytearray('ABC', 'utf-8') print('Before updation:', random_byte_array) mv = memoryview(random_byte_array) # update 1st index of mv to Z mv(1) = 90 print('After updation:', random_byte_array)

Keluaran

 Sebelum pembaruan: bytearray (b'ABC ') Setelah pembaruan: bytearray (b'AZC') 

Di sini, kami memperbarui indeks pertama tampilan memori menjadi 90, nilai ASCII Z.

Karena, objek tampilan memori mv mereferensikan buffer / memori yang sama, memperbarui indeks dalam mv juga memperbarui random_byte_array.

Artikel yang menarik...