Для чего нужен тип буфера Python?

В python есть тип буфера типа , но Я не знаю, как я могу его использовать.

В Python doc описание:

буфер (объект [, смещение [, размер]])

Аргумент объекта должен быть объектом, который поддерживает интерфейс вызова буфера (например, строки, массивы и буферы). Будет создан новый объект буфера, который ссылается на аргумент объекта. Буферный объект будет срезом от начала объекта (или от указанного смещения). Срез будет продолжаться до конца объекта (или будет иметь длину, заданную аргументом размера).

130
задан Arjun J Rao 1 September 2014 в 06:08
поделиться

2 ответа

Пример использования:

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

Буфер в этом случае представляет собой подстроку, начинающуюся с позиции 6 и имеющую длину 5, и не занимает дополнительного места для хранения - он ссылается на срез строки.

Это не очень полезно для таких коротких строк, но может быть необходимо при использовании больших объемов данных. В этом примере используется изменяемый массив байтов :

>>> 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'

Это может быть очень полезно, если вы хотите иметь более одного представления данных и не хотите (или не можете) хранить несколько копий в памяти. .

Обратите внимание, что buffer был заменен на более удачно названный memoryview в Python 3, хотя вы можете использовать любой из них в Python 2.7.

Отметьте также, что вы не можете реализовать интерфейс буфера для ваших собственных объектов, не углубляясь в C API, т.е. вы не можете сделать это на чистом Python.

134
ответ дан 24 November 2019 в 00:25
поделиться

Я думаю, что буферы, например, полезно при взаимодействии Python с собственными библиотеками. (Гвидо ван Россум объясняет буфер в этом сообщении списка рассылки ).

Например, numpy, похоже, использует буфер для эффективного хранения данных:

import numpy
a = numpy.ndarray(1000000)

a.data - это:

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
22
ответ дан 24 November 2019 в 00:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: