Paparan memori Python ()

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

Sebelum kita melihat apakah pandangan memori, kita perlu memahami terlebih dahulu mengenai protokol penyangga Python.

Protokol Python Buffer

Protokol penyangga menyediakan cara untuk mengakses data dalaman objek. Data dalaman ini adalah susunan memori atau penyangga.

Protokol penyangga membolehkan satu objek mengekspos data dalamannya (penyangga) dan yang lain untuk mengakses penyangga tersebut tanpa menyalin antara.

Protokol ini hanya dapat diakses oleh kami di tingkat C-API dan tidak menggunakan pangkalan data biasa kami.

Oleh itu, untuk memaparkan protokol yang sama ke pangkalan pod Python biasa, paparan memori hadir.

Apakah pandangan memori?

Pandangan memori adalah cara yang selamat untuk memaparkan protokol penyangga di Python.

Ini membolehkan anda mengakses penyangga dalaman objek dengan membuat objek pandangan memori.

Mengapa protokol buffer dan paparan memori penting?

Kita perlu ingat bahawa setiap kali kita melakukan beberapa tindakan pada objek (memanggil fungsi objek, memotong array), Python perlu membuat salinan objek .

Sekiranya kita mempunyai data yang besar untuk dikerjakan (mis. Data biner gambar), kita tidak perlu membuat salinan potongan besar data, yang hampir tidak berguna.

Dengan menggunakan protokol penyangga, kita dapat memberikan akses objek lain untuk menggunakan / mengubah data besar tanpa menyalinnya. Ini menjadikan program menggunakan memori yang lebih sedikit dan meningkatkan kelajuan pelaksanaan.

Python memoryview () Sintaks

Untuk mendedahkan protokol penyangga menggunakan memoryview(), kami menggunakan sintaks ini:

 pandangan ingatan (obj)

paparan memori () Parameter

Yang memoryview()fungsi mengambil parameter tunggal:

  • obj - objek yang data dalamannya akan didedahkan. objmesti menyokong protokol penyangga (byte, bytearray)

Nilai kembali dari memoryview ()

Yang memoryview()mengembalikan objek pandangan ingatan.

Contoh 1: Bagaimana memoryview () berfungsi di 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)))

Pengeluaran

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

Di sini, kami membuat objek pandangan 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 bait.

Akhirnya, kami mengakses semua indeks mv dan menukarnya menjadi senarai. Oleh kerana secara dalaman bytearraymenyimpan nilai ASCII untuk huruf, outputnya adalah senarai nilai ASCII dari A, B, dan C.

Contoh 2: Ubah suai data dalaman menggunakan pandangan 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)

Pengeluaran

 Sebelum kemas kini: bytearray (b'ABC ') Selepas kemas kini: bytearray (b'AZC') 

Di sini, kami mengemas kini indeks pertama paparan memori menjadi 90, nilai ASCII sebanyak Z.

Oleh kerana, objek paparan memori merujuk pada buffer / memori yang sama, mengemas kini indeks dalam mv juga mengemas kini random_byte_array.

Artikel menarik...