English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Grundlegende Anleitung zu Python

Python-Flusskontrolle

Python Funktion

Python Datentypen

Dateioperationen in Python

Python Objekte und Klassen

Python Datum und Zeit

Hochwertiges Wissen über Python

Python Referenzhandbuch

Verwendung und Beispiel von Python memoryview()

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.

Python Pufferprotokoll

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.

Was ist eine Memory View?

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.

Warum sind Pufferprotokoll und Memory View wichtig?

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.

Syntax von Python memoryview()

Um den offenen Pufferprotokoll memoryview() zu verwenden, verwenden wir die folgende Syntax:

memoryview(obj)

Parameter von memoryview()

Die Funktion memoryview() akzeptiert einen einzigen Parameter:

  • obj-Objekte, die ihr internes Daten öffnen möchten. obj muss das Pufferprotokoll unterstützen}}bytes,bytearray)

Wert von memoryview()

Die Funktion memoryview() gibt ein Speichervorschaubild-Objekt zurück.

Beispiel1:Wie kann man memoryview() in Python verwenden?

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

Beispiel2:Interne Daten mit Memoryview bearbeiten

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

Python-intern definierte Funktionen