English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Python-intern definierte Funktionen
Die Funktion memoryview() gibt ein Memory View-Objekt zurück, das dem angegebenen Parameter entspricht.
Bevor wir verstehen, was eine Memory View ist, müssen wir zunächst das Pufferprotokoll von Python verstehen.
Das Pufferprotokoll bietet eine Methode, um auf die internen Daten eines Objekts zuzugreifen. Diese internen Daten sind Speicherarray oder Puffer.
Das Pufferprotokoll ermöglicht es einem Objekt, seine internen Daten (Puffer) öffentlich zu machen, und einem anderen, auf diese Puffer zuzugreifen, ohne Zwischenkopien zu erzeugen.
Wir können nur in C-Sie können auf diesem Protokoll auf API-Ebene zugreifen, aber nicht mit unserer regulären Codebibliothek.
Daher ist es erforderlich, Memory View zu verwenden, um das gleiche Protokoll für die allgemeine Python-Bibliothek öffentlich zu machen.
Memory View ist eine sichere Methode zur Öffnung des offenen Pufferprotokolls in Python.
Es ermöglicht Ihnen, den internen Puffer eines Objekts durch Erstellen eines Memory View-Objekts zu erreichen.
Wir müssen uns daran erinnern, dass Python jedes Mal, wenn wir eine bestimmte Operation an einem Objekt ausführen (z.B. eine Funktion des Objekts aufrufen, ein Array schneiden), eindieses ObjektsdesKopie.
Wenn wir mit großen Daten umgehen müssen (z.B. binärem Daten von Bildern), ist es unnötig, Kopien großer Daten zu erstellen, was fast nutzlos ist.
Mit dem Pufferprotokoll können wir einem anderen Objekt den Zugriff auf/Verändern Sie große Daten, ohne sie zu kopieren. Dies führt dazu, dass das Programm weniger Speicher verbraucht und die Ausführungsgeschwindigkeit erhöht.
Um den offenen Pufferprotokoll memoryview() zu verwenden, verwenden wir die folgende Syntax:
memoryview(obj)
Die Funktion memoryview() akzeptiert einen einzigen Parameter:
obj-Objekte, die ihr internes Daten öffnen möchten. obj muss das Pufferprotokoll unterstützen}}bytes,bytearray)
Die Funktion memoryview() gibt ein Speichervorschaubild-Objekt zurück.
#Zufälliges bytearray random_byte_array = bytearray('ABC', 'utf)-8) mv = memoryview(random_byte_array) # Den Nullten Index des Memoryviews ansprechen print(mv[0]) # Bytes aus Memoryview erstellen print(bytes(mv[0:2)) # Liste aus Memoryview erstellen print(list(mv[0:3))
Ausgaberesultat
65 b'AB' [65, 66, 67]
hierrandom_byte_arrayhat ein Speichervorschaubild-Objekt erstelltmv.
dannmvden Index 0, 'A' und haben es gedruckt (geben den ASCII-Wert an)-65)。
Gleichzeitig haben wir von 0 und1 Zugriffmvden Index 'AB' abgerufen und in Bytes umgewandelt.
Schließlich haben wir alle Indizes von mv abgerufen und in eine Liste umgewandelt. Da der interne Byte-Array die ASCII-Werte der Buchstaben speichert, ist die Ausgabe eine Liste der ASCII-Werte von A, B und C.
# Randomes bytearray random_byte_array = bytearray('ABC', 'utf)-8) print('Vor dem Update:', random_byte_array) mv = memoryview(random_byte_array) # Den ersten Index von mv auf Z aktualisieren mv[1] = 90 print('Nach dem Update:', random_byte_array)
Ausgaberesultat
Vor dem Update: bytearray(b'ABC') Nach dem Update: bytearray(b'AZC')
Hier aktualisieren wir den ersten Index des Speichervorschaubildes90, das ist der ASCII-Wert von Z.
Da das Speichervorschaubild-ObjektmvReferenz auf denselben Puffer/Speicher, daher wird aktualisiertmv中Der Index wird ebenfalls aktualisiertrandom_byte_array.