Pergunta

Existe um buffer Digite Python, mas não sei como posso usá -lo.

No Python Doc A descrição é:

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

O argumento do objeto deve ser um objeto que suporta a interface de chamada buffer (como strings, matrizes e buffers). Um novo objeto buffer será criado que referencia o argumento do objeto. O objeto buffer será uma fatia do início do objeto (ou do deslocamento especificado). A fatia se estenderá ao final do objeto (ou terá um comprimento dado pelo argumento do tamanho).

Foi útil?

Solução

Um exemplo 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

O buffer neste caso é uma sub -string, começando na posição 6 com o comprimento 5, e não ocupa espaço de armazenamento extra - faz referência a uma fatia da corda.

Isso não é muito útil para seqüências curtas como essa, mas pode ser necessário ao usar grandes quantidades de dados. Este exemplo usa um mutável 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'

Isso pode ser muito útil se você quiser ter mais de uma exibição sobre os dados e não quiser (ou não pode) manter várias cópias na memória.

Observe que buffer foi substituído pelo melhor nomeado memoryview no Python 3, embora você possa usar o Python 2.7.

Observe também que você não pode implementar uma interface de buffer para seus próprios objetos sem se aprofundar na API C, ou seja, você não pode fazê -lo em python puro.

Outras dicas

Eu acho que os buffers são úteis quando interface o Python nas bibliotecas nativas. (Guido van Rossum explica buffer dentro Esta postagem da Lista Mailing).

Por exemplo, Numpy parece usar o buffer para armazenamento de dados eficientes:

import numpy
a = numpy.ndarray(1000000)

a a.data é um:

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top