151 votes

À quoi sert le type de tampon Python ?

Il existe un buffer en python, mais je ne sais pas comment l'utiliser.

Dans le Document Python la description est :

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

L'argument objet doit être un objet qui prend en charge l'interface d'appel de tampon (comme les chaînes, les tableaux et les tampons). Un nouvel objet tampon sera créé qui fait référence à l'argument objet. L'objet tampon sera une tranche à partir du début de l'objet (ou du décalage spécifié). La tranche s'étendra jusqu'à la fin de l'objet (ou aura une longueur donnée par l'argument size).

161voto

Scott Griffiths Points 8867

Un exemple d'utilisation :

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

Dans ce cas, le tampon est une sous-chaîne, commençant à la position 6 avec une longueur de 5, et il ne prend pas d'espace de stockage supplémentaire - il référence une tranche de la chaîne.

Ce n'est pas très utile pour les chaînes courtes comme celle-ci, mais cela peut être nécessaire lorsqu'on utilise de grandes quantités de données. Cet exemple utilise un objet 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'

Cela peut être très utile si vous souhaitez avoir plus d'une vue sur les données et que vous ne voulez pas (ou ne pouvez pas) conserver plusieurs copies en mémoire.

Notez que buffer a été remplacé par le mieux nommé memoryview dans Python 3, bien que vous puissiez utiliser l'un ou l'autre dans Python 2.7.

Notez également que vous ne pouvez pas implémenter une interface tampon pour vos propres objets sans vous plonger dans l'API C, c'est-à-dire que vous ne pouvez pas le faire en Python pur.

30voto

Andre Holzner Points 6419

Je pense que les buffers sont par exemple utiles pour interfacer python avec des bibliothèques natives. (Guido van Rossum explique buffer en cette liste de diffusion ).

Par exemple, numpy semble utiliser un tampon pour un stockage efficace des données :

import numpy
a = numpy.ndarray(1000000)

le site a.data est un :

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X