objbuffer.md
1> **Источник:** https://python-all.ru/3.1/c-api/objbuffer.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Старый буферный протокол89Устарело с версии 3.0.1011Эти функции были частью API «старого буферного протокола» в Python 2. В Python 3 этот протокол больше не существует, но функции всё ещё доступны для упрощения переноса кода из версии 2.x. Они работают как обёртка для совместимости вокруг [*нового буферного протокола*](https://python-all.ru/3.1/c-api/buffer.html#bufferobjects), но не дают контроля над временем жизни ресурсов, захваченных при экспорте буфера.1213Поэтому рекомендуется вызывать [`PyObject_GetBuffer()`](https://python-all.ru/3.1/c-api/buffer.html#PyObject_GetBuffer) (или `y*` или `w*` [*коды формата*](https://python-all.ru/3.1/c-api/arg.html#arg-parsing) с помощью [`PyArg_ParseTuple()`](https://python-all.ru/3.1/c-api/arg.html#PyArg_ParseTuple)) для получения буферного представления объекта и [`PyBuffer_Release()`](https://python-all.ru/3.1/c-api/buffer.html#PyBuffer_Release), когда это представление можно освободить.1415**int `PyObject_AsCharBuffer`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*obj*, const char *\*\*buffer*, Py\_ssize\_t *\*buffer\_len*)**1617Возвращает указатель на область памяти, доступную только для чтения, пригодную для ввода на основе символов. Аргумент1819*obj*2021должен поддерживать интерфейс односегментного символьного буфера. При успехе возвращает2223`0`2425, устанавливает2627*buffer*2829на область памяти и3031*buffer\_len*3233– длину буфера. При ошибке возвращает3435`-1`3637и устанавливает3839[`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError)4041.4243**int `PyObject_AsReadBuffer`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*obj*, const void *\*\*buffer*, Py\_ssize\_t *\*buffer\_len*)**4445Возвращает указатель на область памяти только для чтения, содержащую произвольные данные. Аргумент4647*obj*4849должен поддерживать интерфейс односегментного читаемого буфера. При успехе возвращает5051`0`5253, устанавливает5455*buffer*5657на область памяти и5859*buffer\_len*6061– длину буфера. При ошибке возвращает6263`-1`6465и устанавливает6667[`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError)6869.7071**int `PyObject_CheckReadBuffer`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*o*)**7273Возвращает7475`1`7677, если7879*o*8081поддерживает интерфейс односегментного читаемого буфера. В противном случае возвращает8283`0`8485.8687**int `PyObject_AsWriteBuffer`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*obj*, void *\*\*buffer*, Py\_ssize\_t *\*buffer\_len*)**8889Возвращает указатель на область памяти, доступную для записи. Аргумент9091*obj*9293должен поддерживать интерфейс односегментного символьного буфера. При успехе возвращает9495`0`9697, устанавливает9899*buffer*100101на область памяти и102103*buffer\_len*104105– длину буфера. При ошибке возвращает106107`-1`108109и устанавливает110111[`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError)112113.114