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 búfer en este caso es una subcadena, que comienza en la posición 6 con longitud 5, y no ocupa espacio de almacenamiento adicional: hace referencia a un segmento de la cadena.
Esto no es muy útil para cadenas cortas como esta, pero puede ser necesario cuando se usan grandes cantidades de datos. Este ejemplo usa un mutable 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'
Esto puede ser muy útil si desea tener más de una vista de los datos y no desea (o no puede) tener varias copias en la memoria.
Tenga en cuenta que bufferha sido reemplazado por el mejor nombrado memoryviewen Python 3, aunque puede usarlo en Python 2.7.
Tenga en cuenta también que no puede implementar una interfaz de búfer para sus propios objetos sin profundizar en la API de C, es decir, no puede hacerlo en Python puro.
s[6:11]tampoco requiere espacio de almacenamiento adicional, ¿estoy equivocado?s[6:11]será una copia. Si configurat = s[6:11]y luegodel s, libera la memoria que fue tomadas, demostrando quetfue copiada. (Para ver esto, necesita unasmemoria más grande y rastrear el uso de Python). Sin embargo, es mucho más eficiente hacer la copia si no hay muchos datos involucrados.Creo que los buffers son, por ejemplo, útiles cuando se conecta Python a bibliotecas nativas. (Guido van Rossum explica
bufferen esta publicación de la lista de correo ).Por ejemplo, numpy parece usar el búfer para un almacenamiento de datos eficiente:
el
a.dataes un:fuente