Python-hukommelsesvisning ()

Funktionen memoryview () returnerer et memory view-objekt for det givne argument.

Før vi går ind i, hvad hukommelsesvisninger er, skal vi først forstå Pythons bufferprotokol.

Python Buffer Protocol

Bufferprotokollen giver en måde at få adgang til de interne data på et objekt. Disse interne data er et hukommelsesarray eller en buffer.

Bufferprotokollen tillader det ene objekt at eksponere sine interne data (buffere) og det andet at få adgang til disse buffere uden mellemliggende kopiering.

Denne protokol er kun tilgængelig for os på C-API-niveau og bruger ikke vores normale codebase.

Så for at udsætte den samme protokol for den normale Python-codebase er hukommelsesvisninger til stede.

Hvad er en hukommelsesvisning?

En hukommelsesvisning er en sikker måde at eksponere bufferprotokollen i Python på.

Det giver dig adgang til de interne buffere på et objekt ved at oprette et objekt med hukommelsesvisning.

Hvorfor bufferprotokol og hukommelsesvisninger er vigtige?

Vi er nødt til at huske, at når vi udfører en handling på et objekt (kald en funktion af et objekt, skiv et array), skal Python oprette en kopi af objektet .

Hvis vi har store data at arbejde med (f.eks. Binære data i et billede), opretter vi unødvendigt kopier af enorme klumper af data, som næsten ikke tjener nogen brug.

Ved hjælp af bufferprotokollen kan vi give et andet objekt adgang til at bruge / ændre de store data uden at kopiere dem. Dette gør, at programmet bruger mindre hukommelse og øger udførelseshastigheden.

Python-hukommelsesvisning () Syntaks

For at udsætte bufferprotokollen ved memoryview()hjælp af denne syntaks:

 memoryview (obj)

memoryview () Parametre

Den memoryview()funktion tager et enkelt parameter:

  • obj - objekt, hvis interne data skal eksponeres. objskal understøtte bufferprotokollen (bytes, bytearray)

Returværdi fra memoryview ()

Den memoryview()funktion returnerer en hukommelse view objekt.

Eksempel 1: Hvordan memoryview () fungerer i 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)))

Produktion

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

Her oprettede vi et hukommelsesvisningsobjekt mv fra byte-arrayet random_byte_array.

Derefter fik vi adgang til mv's 0. indeks, 'A'og udskrev det (hvilket giver ASCII-værdien - 65).

Igen fik vi adgang til mv's indekser fra 0 og 1 'AB'og konverterede dem til bytes.

Endelig fik vi adgang til alle indeks for mv og konverterede det til en liste. Da internt bytearraygemmer ASCII-værdi for alfabeterne, er output en liste over ASCII-værdier på A, B og C.

Eksempel 2: Rediger interne data ved hjælp af hukommelsesvisning

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

Produktion

 Før opdatering: bytearray (b'ABC ') Efter opdatering: bytearray (b'AZC') 

Her opdaterede vi hukommelsesvisningens 1. indeks til 90, ASCII-værdien på Z.

Da hukommelsesvisningsobjektet mv henviser til den samme buffer / hukommelse, opdateres indekset i mv også tilfældigt_byte_array.

Interessante artikler...