Python memoryview ()

A memoryview () függvény az adott argumentum memória nézet objektumát adja vissza.

Mielőtt rátérnénk a memória nézetekre, először meg kell értenünk a Python pufferprotokollját.

Python puffer protokoll

A puffer protokoll lehetővé teszi az objektum belső adatainak elérését. Ez a belső adat memóriatömb vagy puffer.

A pufferprotokoll lehetővé teszi az egyik objektum számára, hogy kitegye a belső adatait (puffereit), a másik pedig hozzáférjen ezekhez a pufferekhez közbenső másolás nélkül.

Ez a protokoll csak a C-API szintjén érhető el számunkra, és nem a normál kódalapunkat használja.

Tehát annak érdekében, hogy ugyanazt a protokollt kitegyük a normál Python kódbázisra, memória nézetek vannak jelen.

Mi a memória nézet?

A memória nézet biztonságos módja a pufferprotokoll leleplezésének a Pythonban.

Ez lehetővé teszi az objektum belső puffereihez való hozzáférést memória nézet objektum létrehozásával.

Miért fontos a puffer protokoll és a memória nézetek?

Nem szabad megfeledkeznünk arról, hogy amikor valamilyen műveletet végrehajtunk egy objektummal (meghívunk egy objektum függvényét, szeletelünk egy tömböt), a Pythonnak létre kell hoznia az objektum másolatát .

Ha nagy adataink vannak (pl. Egy kép bináris adatai), akkor feleslegesen hoznánk létre hatalmas adatdarabok másolatait, amelyek szinte semmit sem használnak.

A pufferprotokoll használatával egy másik objektum számára hozzáférést adhatunk a nagy adatok felhasználásához / módosításához másolás nélkül. Ezáltal a program kevesebb memóriát használ fel, és növeli a végrehajtás sebességét.

Python memoryview () Szintaxis

A puffer protokoll memoryview()használatával ezt a szintaxist használjuk:

 memoryview (obj)

memoryview () Paraméterek

A memoryview()függvény egyetlen paramétert vesz fel:

  • obj - objektum, amelynek belső adatait ki akarják tüntetni. objtámogatnia kell a puffer protokollt (bájt, bytearray)

Visszatérési érték memórianézetből ()

A memoryview()függvény egy memória nézet objektumot ad vissza.

1. példa: Hogyan működik a memoryview () a Pythonban?

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

Kimenet

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

Itt hoztunk létre egy memória nézet objektumot mv a random_byte_array bájt tömbből.

Ezután meglátogattuk az mv 0. indexét, 'A'és kinyomtattuk (ez adja az ASCII értéket - 65).

Ismét elérhettük az mv indexeit 0-tól 1-ig 'AB', és átalakítottuk őket bájtokká.

Végül meglátogattuk az mv összes indexét és átalakítottuk listává. Mivel az bytearrayASCII értéket belsőleg tárolja az ábécék számára, a kimenet az A, B és C ASCII-értékek listája.

2. példa: A belső adatok módosítása a memória nézet segítségével

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

Kimenet

 Frissítés előtt: bytearray (b'ABC ') Frissítés után: bytearray (b'AZC') 

Itt frissítettük a memória nézet 1. indexét 90-re, az ASCII értékre Z.

Mivel az mv memória nézet objektum ugyanarra a pufferre / memóriára hivatkozik, az mv index frissítése a random_byte_array fájlt is frissíti.

érdekes cikkek...