通常,通过 PyObject_GetBuffer() 向输出对象发送缓冲区请求,即可获得缓冲区。由于内存的逻辑结构复杂,可能会有很大差异,缓冲区使用者可用 flags 参数指定其能够处理的缓冲区具体类型。 与请求无关的字段只读,格式[size=1.1em]PyBUF_WRITABLE
控制 readonly 字段。如果设置了,输出程序 必须 提供一个可写的缓冲区,否则报告失败。若未设置,输出程序 可以 提供只读或可写的缓冲区,但对所有消费者程序 必须 保持一致。 [size=1.1em]PyBUF_FORMAT
控制 format 字段。 如果设置,则必须正确填写此字段。其他情况下,此字段必须为 NULL。 形状,步幅,子偏移量控制内存逻辑结构的标志按照复杂度的递减顺序列出。注意,每个标志包含它下面的所有标志。 [td] | | | | [size=1.1em]PyBUF_INDIRECT
| | | | [size=1.1em]PyBUF_STRIDES
| | | | [size=1.1em]PyBUF_ND
| | | | [size=1.1em]PyBUF_SIMPLE
| | | |
连续性的请求可以显式地请求C 或 Fortran 连续 ,不管有没有步幅信息。若没有步幅信息,则缓冲区必须是 C-连续的。 [td] | | | | | [size=1.1em]PyBUF_C_CONTIGUOUS
| | | | | [size=1.1em]PyBUF_F_CONTIGUOUS
| | | | | [size=1.1em]PyBUF_ANY_CONTIGUOUS
| | | | | | | | | |
复合请求所有可能的请求都由上一节中某些标志的组合完全定义。为方便起见,缓冲区协议提供常用的组合作为单个标志。 [td] | | | | | | | [size=1.1em]PyBUF_FULL
| | | | | | | [size=1.1em]PyBUF_FULL_RO
| | | | | | | [size=1.1em]PyBUF_RECORDS
| | | | | | | [size=1.1em]PyBUF_RECORDS_RO
| | | | | | | [size=1.1em]PyBUF_STRIDED
| | | | | | | [size=1.1em]PyBUF_STRIDED_RO
| | | | | | | [size=1.1em]PyBUF_CONTIG
| | | | | | | [size=1.1em]PyBUF_CONTIG_RO
| | | | | | |
|