Frage

Es gibt einen buffer Typen in Python, aber ich weiß nicht, wie kann ich es verwenden.

In der Python doc der Beschreibung lautet:

  

buffer(object[, offset[, size]])

     

Das Argument Objekt muss ein Objekt sein, das die Pufferaufrufschnittstelle (wie Strings, Arrays und Puffer) unterstützt. Ein neues Puffer-Objekt wird erstellt, die das Objekt Argument verweist. Das Puffer-Objekt wird eine Scheibe von Beginn des Gegenstandes (oder aus dem Offset angegeben). Die Scheibe wird an das Ende des Gegenstandes erstrecken (oder eine Länge durch die Größe Argument angegeben hat).

War es hilfreich?

Lösung

Ein Beispiel für die Verwendung:

>>> s = 'Hello world'
>>> t = buffer(s, 6, 5)
>>> t
<read-only buffer for 0x10064a4b0, size 5, offset 6 at 0x100634ab0>
>>> print t
world

Der Puffer in diesem Fall ist eine Unterkette, beginnend an Position 6 mit einer Länge von 5, und es braucht nicht extra Stauraum. - Es verweist auf ein Stück der Schnur

Das ist nicht sehr nützlich für kurze Strings wie diese, aber es kann notwendig sein, wenn große Mengen an Daten. In diesem Beispiel wird eine veränderbare bytearray:

>>> s = bytearray(1000000)   # a million zeroed bytes
>>> t = buffer(s, 1)         # slice cuts off the first byte
>>> s[1] = 5                 # set the second element in s
>>> t[0]                     # which is now also the first element in t!
'\x05'

Dies kann sehr hilfreich sein, wenn Sie mehr als eine Sicht auf die Daten haben wollen und wollen nicht (oder nicht) halten mehrere Kopien im Speicher.

Beachten Sie, dass buffer wurde durch die besser genannt ersetzt memoryview in Python 3, wenn Sie 2.7 in Python verwenden entweder.

Beachten Sie auch, dass Sie keine Puffer-Schnittstelle für Ihre eigenen Objekte ohne Eintauchen in den C-API implementieren können, das heißt Sie es in reinem Python nicht tun können.

Andere Tipps

Ich denke, Puffer sind z.B. nützlich, wenn Python zu nativen Bibliotheken Schnittstelle. (Guido van Rossum, erklärt buffer in dieser Mailingliste Post ).

Zum Beispiel numpy scheint Verwendung Puffer für eine effiziente Datenspeicherung:

import numpy
a = numpy.ndarray(1000000)

die a.data ist ein:

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top