> **Источник:** https://python-all.ru/3.11/c-api/objbuffer.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Старый буферный протокол

Устарело с версии 3.0.

Эти функции были частью API «старого буферного протокола» в Python 2. В Python 3 этот протокол больше не существует, но функции всё ещё доступны для упрощения переноса кода из версии 2.x. Они работают как обёртка для совместимости вокруг [нового буферного протокола](https://python-all.ru/3.11/c-api/buffer.html#bufferobjects), но не дают контроля над временем жизни ресурсов, захваченных при экспорте буфера.

Поэтому рекомендуется вызывать [`PyObject_GetBuffer()`](https://python-all.ru/3.11/c-api/buffer.html#c.PyObject_GetBuffer) (или `y*`, или `w*` [коды форматов](https://python-all.ru/3.11/c-api/arg.html#arg-parsing) с семейством функций [`PyArg_ParseTuple()`](https://python-all.ru/3.11/c-api/arg.html#c.PyArg_ParseTuple)), чтобы получить представление буфера для объекта, и [`PyBuffer_Release()`](https://python-all.ru/3.11/c-api/buffer.html#c.PyBuffer_Release), когда представление буфера можно освободить.

#### `int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, Py_ssize_t *buffer_len)`

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

Возвращает указатель на область памяти только для чтения, пригодную для ввода на основе символов. Аргумент *obj* должен поддерживать интерфейс односегментного символьного буфера. При успехе возвращает `0`, устанавливает *buffer* на эту область памяти, а *buffer\_len* – на длину буфера. В случае ошибки возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/3.11/library/exceptions.html#TypeError).

#### `int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len)`

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

Возвращает указатель на область памяти только для чтения, содержащую произвольные данные. Аргумент *obj* должен поддерживать интерфейс односегментного читаемого буфера. При успехе возвращает `0`, устанавливает *buffer* на эту область памяти, а *buffer\_len* – на длину буфера. В случае ошибки возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/3.11/library/exceptions.html#TypeError).

#### `int PyObject_CheckReadBuffer(PyObject *o)`

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

Возвращает `1`, если *o* поддерживает интерфейс односегментного читаемого буфера. В противном случае возвращает `0`. Эта функция всегда завершается успешно.

Обратите внимание, что эта функция пытается получить и освободить буфер, а исключения, возникающие при вызове соответствующих функций, подавляются. Чтобы получать сообщения об ошибках, используйте вместо неё [`PyObject_GetBuffer()`](https://python-all.ru/3.11/c-api/buffer.html#c.PyObject_GetBuffer).

#### `int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)`

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

Возвращает указатель на область памяти для записи. Аргумент *obj* должен поддерживать односегментный символьный интерфейс буфера. При успехе возвращает `0`, устанавливает *buffer* на эту область памяти, а *buffer\_len* – на длину буфера. В случае ошибки возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/3.11/library/exceptions.html#TypeError).
