Python memoryview ()

Funkcia memoryview () vráti objekt zobrazenia pamäte daného argumentu.

Predtým, ako sa dostaneme do toho, čo sú pamäťové pohľady, musíme si najskôr uvedomiť Pythonov vyrovnávací protokol.

Protokol vyrovnávacej pamäte Python

Protokol medzipamäte poskytuje spôsob prístupu k interným údajom objektu. Týmito internými údajmi je pamäťové pole alebo vyrovnávacia pamäť.

Protokol medzipamäte umožňuje jednému objektu vystaviť jeho interné údaje (medzipamäte) a druhému prístup k týmto medzipamätiam bez medzikrokovania.

Tento protokol je prístupný iba nám na úrovni C-API a nepoužíva náš bežný kódový základ.

Takže, aby sa ten istý protokol vystavil normálnej kódovej základni Pythonu, sú prítomné pamäťové pohľady.

Čo je to zobrazenie pamäte?

Zobrazenie pamäte je bezpečný spôsob vystavenia protokolu vyrovnávacej pamäte v Pythone.

Umožňuje vám prístup k vnútorným vyrovnávacím pamätiam objektu vytvorením objektu zobrazenia pamäte.

Prečo sú dôležité protokoly vyrovnávacej pamäte a pamäte?

Musíme si uvedomiť, že kedykoľvek vykonáme na objekte nejakú akciu (zavoláme funkciu objektu, rozkrojíme pole), Python musí vytvoriť kópiu objektu .

Keby sme mali k dispozícii veľké dáta na prácu (napr. Binárne dáta obrázka), zbytočne by sme vytvorili kópie obrovských častí dát, ktoré slúžia takmer na nič.

Pomocou protokolu vyrovnávacej pamäte môžeme dať ďalšiemu objektu prístup na použitie / úpravu veľkých údajov bez ich kopírovania. Toto umožňuje programu využívať menej pamäte a zvyšuje rýchlosť vykonávania.

Syntax Python memoryview ()

Na vystavenie protokolu vyrovnávacej pamäte memoryview()používame túto syntax:

 memoryview (obj)

memoryview () parametre

memoryview()Funkcia trvá jeden parameter:

  • obj - objekt, ktorého interné údaje majú byť sprístupnené. objmusí podporovať protokol vyrovnávacej pamäte (bajty, bytearray)

Vrátiť hodnotu z memoryview ()

memoryview()Funkcia vracia objekt dekódovacie pamäť.

Príklad 1: Ako funguje memoryview () v Pythone?

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

Výkon

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

Tu sme vytvorili objekt zobrazenia pamäte mv z bajtového poľa random_byte_array.

Potom sme vstúpili do 0. indexu mv 'A'a vytlačili ho (čo dáva hodnotu ASCII - 65).

Opäť sme pristupovali k indexom mv z 0 a 1 'AB'a previedli ich na bajty.

Nakoniec sme sa dostali ku všetkým indexom mv a previedli sme ich na zoznam. Pretože interne bytearrayukladá hodnotu ASCII pre abecedy, výstupom je zoznam hodnôt ASCII A, B a C.

Príklad 2: Upravte interné údaje pomocou zobrazenia pamäte

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

Výkon

 Pred aktualizáciou: bytearray (b'ABC ') Po aktualizácii: bytearray (b'AZC') 

Tu sme aktualizovali prvý index zobrazenia pamäte na 90, čo je hodnota ASCII Z.

Pretože objekt zobrazenia pamäte mv odkazuje na rovnakú vyrovnávaciu pamäť / pamäť, aktualizácia indexu v mv tiež aktualizuje random_byte_array.

Zaujímavé články...