Python-geheugenweergave ()

De functie memoryview () retourneert een geheugenview-object van het opgegeven argument.

Voordat we ingaan op wat geheugenweergaven zijn, moeten we eerst het bufferprotocol van Python begrijpen.

Python-bufferprotocol

Het bufferprotocol biedt een manier om toegang te krijgen tot de interne gegevens van een object. Deze interne gegevens zijn een geheugenarray of een buffer.

Het bufferprotocol stelt het ene object in staat om zijn interne gegevens (buffers) vrij te geven en het andere om toegang te krijgen tot die buffers zonder tussentijds kopiëren.

Dit protocol is voor ons alleen toegankelijk op het C-API-niveau en maakt geen gebruik van onze normale codebase.

Dus om hetzelfde protocol bloot te stellen aan de normale Python-codebase, zijn er geheugenweergaven aanwezig.

Wat is een geheugenweergave?

Een geheugenweergave is een veilige manier om het bufferprotocol in Python bloot te leggen.

Hiermee krijgt u toegang tot de interne buffers van een object door een geheugenweergave-object te maken.

Waarom zijn bufferprotocol en geheugenweergaven belangrijk?

We moeten onthouden dat wanneer we een actie uitvoeren op een object (een functie van een object aanroepen, een array snijden), Python een kopie van het object moet maken .

Als we grote gegevens hebben om mee te werken (bijv. Binaire gegevens van een afbeelding), zouden we onnodig kopieën maken van enorme hoeveelheden gegevens, die bijna geen nut hebben.

Met behulp van het bufferprotocol kunnen we een ander object toegang geven om de grote gegevens te gebruiken / wijzigen zonder deze te kopiëren. Hierdoor gebruikt het programma minder geheugen en neemt de uitvoeringssnelheid toe.

Python memoryview () Syntaxis

Om het bufferprotocol te gebruiken memoryview(), gebruiken we deze syntaxis:

 memoryview (obj)

memoryview () Parameters

De memoryview()functie heeft een enkele parameter nodig:

  • obj - object waarvan de interne gegevens moeten worden weergegeven. objmoet het bufferprotocol ondersteunen (bytes, bytearray)

Retourwaarde van memoryview ()

De memoryview()functie retourneert een geheugenweergave-object.

Voorbeeld 1: hoe memoryview () werkt in 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)))

Uitvoer

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

Hier hebben we een Memory View-object mv gemaakt van de byte-array random_byte_array.

Vervolgens hebben we de 0e index van de mv geopend 'A'en deze afgedrukt (wat de ASCII-waarde - 65 geeft).

Opnieuw hebben we de mv-indices van 0 en 1, benaderd 'AB'en omgezet in bytes.

Ten slotte hebben we alle indices van mv benaderd en geconverteerd naar een lijst. Omdat intern bytearrayASCII-waarden voor de alfabetten worden opgeslagen, is de uitvoer een lijst met ASCII-waarden van A, B en C.

Voorbeeld 2: Wijzig interne gegevens met behulp van geheugenweergave

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

Uitvoer

 Voor update: bytearray (b'ABC ') Na update: bytearray (b'AZC') 

Hier hebben we de eerste index van de geheugenweergave bijgewerkt naar 90, de ASCII-waarde van Z.

Aangezien het geheugenweergave-object mv naar dezelfde buffer / hetzelfde geheugen verwijst, wordt bij het bijwerken van de index in mv ook random_byte_array bijgewerkt.

Interessante artikelen...