旧缓冲协议

从 3.0 版开始不推荐使用。

这些Function是 Python 2 中“旧缓冲区协议” API 的一部分。在 Python 3 中,该协议已不存在,但仍可以使用这些Function以方便移植 2.x 代码。它们充当新的缓冲协议的兼容性包装器,但是它们不能使您控制导出缓冲区时获取的资源的生存期。

因此,建议您调用PyObject_GetBuffer()(或PyArg_ParseTuple()系列的y*w* format codes)以获取对象上的缓冲区视图,并在可以释放缓冲区视图时调用PyBuffer_Release()

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

    • 返回一个指向只读存储位置的指针,该位置可用作基于字符的 Importing。 * 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。此Function始终成功。

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

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