Старый буферный протокол¶Old Buffer Protocol
Устарело с версии 3.0.
Эти функции были частью API «старого буферного протокола» в Python 2. В Python 3 этот протокол больше не существует, но функции всё ещё доступны для упрощения переноса кода из версии 2.x. Они работают как обёртка для совместимости вокруг нового буферного протокола, но не дают контроля над временем жизни ресурсов, захваченных при экспорте буфера.
Поэтому рекомендуется вызывать PyObject_GetBuffer() (или y*, или w* коды форматов с семейством функций PyArg_ParseTuple()), чтобы получить представление буфера для объекта, и PyBuffer_Release(), когда представление буфера можно освободить.
-
int
PyObject_AsCharBuffer(PyObject *obj, const char **buffer, Py_ssize_t *buffer_len)¶ Возвращает указатель на область памяти только для чтения, пригодную для ввода на основе символов. Аргумент obj должен поддерживать интерфейс односегментного символьного буфера. При успехе возвращает
0, устанавливает buffer на эту область памяти, а buffer_len – на длину буфера. В случае ошибки возвращает-1и устанавливаетTypeError.
-
int
PyObject_AsReadBuffer(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len)¶ Возвращает указатель на область памяти только для чтения, содержащую произвольные данные. Аргумент obj должен поддерживать интерфейс односегментного читаемого буфера. При успехе возвращает
0, устанавливает buffer на эту область памяти, а buffer_len – на длину буфера. В случае ошибки возвращает-1и устанавливаетTypeError.
-
int
PyObject_CheckReadBuffer(PyObject *o)¶ Возвращает
1, если o поддерживает интерфейс односегментного читаемого буфера. В противном случае возвращает0. Эта функция всегда завершается успешно.Обратите внимание, что эта функция пытается получить и освободить буфер, а исключения, возникающие при вызове соответствующих функций, подавляются. Чтобы получать сообщения об ошибках, используйте вместо неё
PyObject_GetBuffer().
-
int
PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)¶ Возвращает указатель на область памяти для записи. Аргумент obj должен поддерживать односегментный символьный интерфейс буфера. При успехе возвращает
0, устанавливает buffer на эту область памяти, а buffer_len – на длину буфера. В случае ошибки возвращает-1и устанавливаетTypeError.