Что такое тип буфера Python?



есть buffer введите python, но я не знаю, как я могу его использовать.



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




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



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


582   2  

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, и он не занимает дополнительного места для хранения-он ссылается на фрагмент строки.

Это не очень полезно для коротких строк, как это, но это может быть необходимо при использовании больших объемов данных. В этом примере используется изменяемый 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'

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

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

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

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

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

import numpy
a = numpy.ndarray(1000000)

the a.data - это:

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

Comments

    Ничего не найдено.