旧缓冲协议 — Python 文档

来自菜鸟教程
Python/docs/3.6/c-api/objbuffer
跳转至:导航、​搜索

旧缓冲协议

自 3.0 版起已弃用。


这些函数是 Python 2 中“旧缓冲协议”API 的一部分。 在 Python 3 中,此协议不再存在,但仍公开了函数以方便移植 2.x 代码。 它们充当 新缓冲区协议 的兼容性包装器,但它们不会让您控制导出缓冲区时获取的资源的生命周期。

因此,建议您调用 PyObject_GetBuffer()(或 y*w* 格式代码 与 PyArg_ParseTuple()[ X157X] 系列函数)获取对象的缓冲区视图,以及 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)

如果 o 支持单段可读缓冲区接口,则返回 1。 否则返回 0。 此功能总是成功。

请注意,此函数尝试获取和释放缓冲区,并且在调用对应函数时发生的异常将被抑制。 要获得错误报告,请改用 PyObject_GetBuffer()

int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)
返回指向可写内存位置的指针。 obj 参数必须支持单段、字符缓冲区接口。 成功时,返回 0,将 buffer 设置为内存位置,将 buffer_len 设置为缓冲区长度。 返回 -1 并在出错时设置 TypeError