Python memoryview ()

Funcția memoryview () returnează un obiect de vizualizare a memoriei pentru argumentul dat.

Înainte de a intra în ceea ce sunt vizualizările de memorie, trebuie să înțelegem mai întâi despre protocolul tampon Python.

Protocolul tampon Python

Protocolul tampon oferă o modalitate de a accesa datele interne ale unui obiect. Aceste date interne sunt o matrice de memorie sau un buffer.

Protocolul tampon permite unui obiect să-și expună datele interne (tampoane), iar celuilalt să acceseze aceste tampoane fără copiere intermediară.

Acest protocol ne este accesibil doar la nivelul C-API și nu folosește baza noastră de cod normală.

Deci, pentru a expune același protocol la baza de cod normal Python, sunt prezente vizualizări de memorie.

Ce este o vizualizare de memorie?

O vizualizare a memoriei este o modalitate sigură de a expune protocolul tampon în Python.

Vă permite să accesați tampoanele interne ale unui obiect prin crearea unui obiect de vizualizare a memoriei.

De ce sunt importante protocolul tampon și vizualizările de memorie?

Trebuie să ne amintim că ori de câte ori efectuăm o acțiune asupra unui obiect (apelăm o funcție a unui obiect, tăiem un tablou), Python trebuie să creeze o copie a obiectului .

Dacă avem date mari cu care să lucrăm (de exemplu, date binare ale unei imagini), am crea în mod inutil copii ale unor bucăți uriașe de date, care nu sunt aproape de nici un folos.

Folosind protocolul tampon, putem oferi acces unui alt obiect pentru a utiliza / modifica datele mari fără a le copia. Acest lucru face ca programul să utilizeze mai puțină memorie și crește viteza de execuție.

Python memoryview () Sintaxă

Pentru a expune protocolul tampon folosind memoryview(), folosim această sintaxă:

 memoryview (obj)

memoryview () Parametri

memoryview()Functia ia un singur parametru:

  • obj - obiect ale cărui date interne urmează să fie expuse. objtrebuie să accepte protocolul tampon (octeți, bytearray)

Returnează valoarea din memoryview ()

memoryview()Funcția returnează un obiect de vizualizare de memorie.

Exemplul 1: Cum funcționează memoryview () în 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)))

Ieșire

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

Aici, am creat un obiect de vizualizare a memoriei mv din matricea de octeți random_byte_array.

Apoi, am accesat indexul 0 al mv 'A'și l-am tipărit (ceea ce dă valoarea ASCII - 65).

Din nou, am accesat indicii mv de la 0 și 1 'AB'și le-am convertit în octeți.

În cele din urmă, am accesat toți indicii mv și l-am convertit într-o listă. Deoarece intern bytearraystochează valoarea ASCII pentru alfabete, ieșirea este o listă a valorilor ASCII ale A, B și C.

Exemplul 2: Modificați datele interne utilizând vizualizarea memoriei

 # 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)

Ieșire

 Înainte de actualizare: bytearray (b'ABC ') După actualizare: bytearray (b'AZC') 

Aici, am actualizat primul index al vizualizării de memorie la 90, valoarea ASCII a Z.

Deoarece, obiectul vizualizare memorie mv face referire la același buffer / memorie, actualizarea indexului în mv actualizează și random_byte_array.

Articole interesante...