Python memoryview ()

Funkcija memoryview () vraća objekt prikaza memorije datog argumenta.

Prije nego što uđemo u ono što su prikazi memorije, prvo moramo razumjeti Pythonov protokol međuspremnika.

Python protokol međuspremnika

Protokol međuspremnika pruža način za pristup internim podacima objekta. Ovi su interni podaci memorijski niz ili međuspremnik.

Protokol međuspremnika omogućuje jednom objektu da izloži svoje interne podatke (međuspremnike), a drugom da pristupi tim međuspremnicima bez međukopiranja.

Ovaj nam je protokol dostupan samo na razini C-API-a, a ne koristi se naša uobičajena baza kodova.

Dakle, kako bi se isti protokol izložio normalnoj Python bazi podataka, prisutni su prikazi memorije.

Što je prikaz memorije?

Prikaz memorije siguran je način izlaganja protokola međuspremnika u Pythonu.

Omogućuje vam pristup internim međuspremnicima objekta stvaranjem objekta memorijskog prikaza.

Zašto su protokoli međuspremnika i prikazi memorije važni?

Moramo imati na umu da kad god izvršimo neku radnju na objektu (pozivamo funkciju objekta, narežemo niz), Python mora stvoriti kopiju objekta .

Ako imamo velike podatke s kojima možemo surađivati ​​(npr. Binarni podaci slike), nepotrebno bismo stvorili kopije ogromnih dijelova podataka, od kojih gotovo nema koristi.

Korištenjem protokola međuspremnika možemo drugom objektu dati pristup korištenju / modificiranju velikih podataka bez kopiranja. To čini da program koristi manje memorije i povećava brzinu izvršavanja.

Sintaksa Python memoryview ()

Da bismo izložili protokol međuspremnika pomoću memoryview(), koristimo ovu sintaksu:

 memoryview (obj)

parametri memoryview ()

memoryview()Funkcija ima jedan parametar:

  • obj - objekt čiji se unutarnji podaci trebaju izložiti. objmora podržavati protokol međuspremnika (bajtovi, bajtray)

Vrati vrijednost iz memoryview ()

memoryview()Funkcija vraća pogled memorije objekt.

Primjer 1: Kako memoryview () radi u 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)))

Izlaz

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

Ovdje smo stvorili objekt prikaza memorije mv iz bajt-polja random_byte_array.

Zatim smo pristupili mv-ovom 0-om indeksu 'A'i ispisali ga (što daje ASCII vrijednost - 65).

Ponovno smo pristupili mv indeksima od 0 i 1 'AB'i pretvorili ih u bajtove.

Napokon, pristupili smo svim indeksima mv i pretvorili ga u popis. Budući da interno bytearraypohranjuje ASCII vrijednost za abecede, izlaz je popis ASCII vrijednosti A, B i C.

Primjer 2: Izmijenite interne podatke pomoću prikaza memorije

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

Izlaz

 Prije nadogradnje: bytearray (b'ABC ') Nakon nadogradnje: bytearray (b'AZC') 

Ovdje smo ažurirali 1. indeks prikaza memorije na 90, ASCII vrijednost Z.

Budući da se objekt prikaza memorije mv odnosi na isti međuspremnik / memoriju, ažuriranje indeksa u mv također ažurira random_byte_array.

Zanimljivi članci...