Python memoryview ()

Funkce memoryview () vrací objekt zobrazení paměti daného argumentu.

Než se dostaneme do zobrazení paměti, musíme nejprve porozumět protokolu vyrovnávací paměti Pythonu.

Protokol vyrovnávací paměti Python

Protokol vyrovnávací paměti poskytuje způsob přístupu k interním datům objektu. Tato interní data jsou paměťové pole nebo vyrovnávací paměť.

Protokol vyrovnávací paměti umožňuje jednomu objektu vystavit jeho interní data (vyrovnávací paměti) a druhému přístup k těmto vyrovnávacím pamětím bez mezilehlého kopírování.

Tento protokol je pro nás přístupný pouze na úrovni C-API a nepoužívá náš normální kódový základ.

Aby bylo možné vystavit stejný protokol normálnímu codebase Pythonu, jsou k dispozici zobrazení paměti.

Co je to zobrazení paměti?

Zobrazení paměti je bezpečný způsob, jak vystavit protokol vyrovnávací paměti v Pythonu.

Umožňuje vám přístup k vnitřním vyrovnávacím pamětím objektu vytvořením objektu zobrazení paměti.

Proč jsou důležité protokoly vyrovnávací paměti a paměti?

Musíme si uvědomit, že kdykoli provádíme nějakou akci s objektem (zavoláme funkci objektu, rozkrojíme pole), musí Python vytvořit kopii objektu .

Pokud máme velká data pro práci (např. Binární data obrázku), zbytečně bychom vytvářeli kopie obrovských kousků dat, která jsou téměř k ničemu.

Pomocí protokolu vyrovnávací paměti můžeme dát jinému objektu přístup k použití / úpravě velkých dat bez jejich kopírování. Díky tomu program používá méně paměti a zvyšuje rychlost provádění.

Syntaxe paměti Pythonu ()

K vystavení protokolu vyrovnávací paměti memoryview()používáme tuto syntaxi:

 memoryview (obj)

memoryview () parametry

memoryview()Funkce trvá jeden parametr:

  • obj - objekt, jehož interní data mají být vystavena. objmusí podporovat protokol vyrovnávací paměti (bajty, bytearray)

Vrátit hodnotu z memoryview ()

memoryview()Funkce vrací objekt dekódovací paměť.

Příklad 1: Jak funguje memoryview () v Pythonu?

 #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ýstup

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

Zde jsme vytvořili objekt zobrazení paměti mv z bajtového pole random_byte_array.

Poté jsme přistupovali k 0. indexu mv 'A'a vytiskli jej (což dává hodnotu ASCII - 65).

Opět jsme přistupovali k indexům mv z 0 a 1 'AB'a převedli jsme je na bajty.

Nakonec jsme přistupovali ke všem indexům mv a převedli jsme je do seznamu. Protože interně bytearrayukládá ASCII hodnotu pro abecedy, výstupem je seznam ASCII hodnot A, B a C.

Příklad 2: Úprava interních dat pomocí zobrazení paměti

 # 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ýstup

 Před aktualizací: bytearray (b'ABC ') Po aktualizaci: bytearray (b'AZC') 

Zde jsme aktualizovali 1. index zobrazení paměti na 90, což je hodnota ASCII Z.

Protože objekt zobrazení paměti mv odkazuje na stejnou vyrovnávací paměť / paměť, aktualizace indexu v mv také aktualizuje random_byte_array.

Zajímavé články...