Pythoni mäluvideo ()

Funktsioon memoryview () tagastab antud argumendi mäluvaate objekti.

Enne kui me saame teada, millised on mäluvaated, peame kõigepealt mõistma Pythoni puhverprotokolli.

Pythoni puhvri protokoll

Puhverprotokoll pakub võimaluse objekti siseandmetele juurde pääseda. Need sisemised andmed on mälumass või puhver.

Puhverprotokoll võimaldab ühel objektil paljastada oma siseandmeid (puhvreid) ja teisel pääseda nendele puhvritele ilma vahepealse kopeerimiseta.

See protokoll on meile juurdepääsetav ainult C-API tasemel ja ei kasuta meie tavalist koodibaasi.

Niisiis, sama protokolli tavalise Pythoni koodibaasi eksponeerimiseks on olemas mäluvaated.

Mis on mäluvaade?

Mäluvaade on turvaline viis Pythonis puhverprotokolli paljastamiseks.

See võimaldab teil pääseda juurde objekti sisemistele puhvritele, luues mäluvaate objekti.

Miks on puhverprotokoll ja mäluvaated olulised?

Peame meeles pidama, et alati kui objektil mingi toimingu sooritame (kutsume objekti funktsiooni, viilutame massiivi), peab Python looma objektist koopia .

Kui meil on töötamiseks suuri andmeid (nt pildi binaarandmed), loome tarbetult koopiad tohututest andmetükkidest, millest pole peaaegu mingit kasu.

Puhverprotokolli abil saame anda teisele objektile juurdepääsu suurte andmete kasutamiseks / muutmiseks ilma neid kopeerimata. See muudab programmi vähem mälumahtu ja suurendab täitmise kiirust.

Pythoni memoryview () süntaks

Kasutades memoryview()puhvriprotokolli, kasutame seda süntaksit:

 memoryview (obj)

memoryview () parameetrid

memoryview()Funktsioon võtab ühe parameetri:

  • obj - objekt, mille siseandmeid paljastatakse. objpeab toetama puhverprotokolli (baidid, bytearray)

Tagastusväärtus mälukaardilt ()

memoryview()Tagastab mälu vaade objekti.

Näide 1: Kuidas memoryview () Pythonis töötab?

 #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äljund

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

Siin lõime mäluvaate objekti mv baidimassiivist random_byte_array.

Seejärel pääsesime juurde mv 0. indeksile 'A'ja printisime selle (mis annab ASCII väärtuse - 65).

Jällegi pääsesime mv indeksitesse 0 ja 1 vahel 'AB'ning teisendasime need baitideks.

Lõpuks tutvusime kõigi mv indeksitega ja teisendasime selle loendiks. Kuna sisemiselt bytearraysalvestatakse tähestike ASCII väärtus, on väljundiks A, B ja C ASCII väärtuste loend.

Näide 2: sisemiste andmete muutmine mäluvaate abil

 # 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äljund

 Enne värskendamist: bytearray (b'ABC ') Pärast värskendamist: bytearray (b'AZC') 

Siin värskendasime mäluvaate 1. indeksi väärtuseks 90, ASCII väärtuseks Z.

Kuna mäluvaate objekt mv viitab samale puhvrile / mälule, värskendab ka mv-s oleva indeksi värskendamine random_byte_array.

Huvitavad Artiklid...