¿Qué es Python tipo de tampón para?
-
26-09-2019 - |
Pregunta
Hay un tipo buffer
en Python, pero no sé cómo puedo utilizarlo.
En el href="http://docs.python.org/library/functions.html#buffer" rel="noreferrer"> Python doc la descripción es:
buffer(object[, offset[, size]])
El argumento objeto debe ser un objeto que soporta la interfaz de llamada tampón (tales como cadenas, matrices y tampones). Un nuevo objeto de almacenamientos intermedios se creará que hace referencia al argumento de objeto. El objeto tampón será una rebanada desde el principio del objeto (o desde el desplazamiento especificado). La rebanada se extenderá hasta el final del objeto (o tendrá una longitud dada por el argumento de tamaño).
Solución
Un ejemplo de uso:
>>> s = 'Hello world'
>>> t = buffer(s, 6, 5)
>>> t
<read-only buffer for 0x10064a4b0, size 5, offset 6 at 0x100634ab0>
>>> print t
world
El tampón en este caso es una sub-secuencia, empezando en la posición 6 con una longitud de 5, y no se necesita espacio de almacenamiento adicional -. Hace referencia a una porción de la cadena
Esto no es muy útil para cadenas cortas como esta, pero puede ser necesaria cuando se utilizan grandes cantidades de datos. Este ejemplo utiliza un bytearray
mutable:
>>> 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'
Esto puede ser muy útil si desea tener más de una vista de los datos y no quiere (o no puede) contener múltiples copias en la memoria.
Tenga en cuenta que buffer
ha sido sustituido por el mejor nombre memoryview
en Python 3, aunque se puede utilizar ya sea en Python 2.7.
Tenga en cuenta también que no se puede implementar una interfaz de memoria intermedia para sus propios objetos sin ahondar en la API de C, es decir, que no puede hacerlo en Python puro.
Otros consejos
Creo tampones son, por ejemplo útil cuando la interfaz Python para bibliotecas nativas. (Guido van Rossum explica buffer
en esta lista de correo posterior ).
Por ejemplo, numpy parece tampón de uso para el almacenamiento de datos eficiente:
import numpy
a = numpy.ndarray(1000000)
el a.data
es un:
<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>