Question

Il y a un type de buffer en python, mais je ne sais pas comment je peux l'utiliser.

Dans le Python doc la description est:

  

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

     

L'argument de l'objet doit être un objet qui prend en charge l'interface d'appel de la mémoire tampon (tels que des chaînes, des tableaux et des tampons). Un nouvel objet tampon sera créé qui fait référence à l'argument de l'objet. L'objet de mémoire tampon sera une tranche de début de l'objet (ou du décalage spécifié). La tranche se prolonger jusqu'à l'extrémité de l'objet (ou aura une longueur donnée par l'argument de la taille).

Était-ce utile?

La solution

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

Le tampon dans ce cas est une sous-chaîne, en commençant à la position 6 d'une longueur de 5, il ne prend pas l'espace de stockage supplémentaire. - il fait 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 il peut être nécessaire lors de l'utilisation de grandes quantités de données. Cet exemple utilise 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'

Cela peut être très utile si vous voulez avoir plus d'un point de vue sur les données et ne veulent pas (ou ne peut pas) contenir plusieurs copies en mémoire.

Notez que buffer a été remplacé par le meilleur nom memoryview en Python 3, bien que vous pouvez utiliser en Python 2.7.

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

Autres conseils

Je pense que les tampons sont, par exemple python utile lorsque l'interface avec les bibliothèques natives. (Guido van Rossum explique buffer cette liste de diffusion post ).

Par exemple, numpy semble tampon d'utilisation pour le stockage de données efficace:

import numpy
a = numpy.ndarray(1000000)

a.data est:

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top