【发布时间】:2011-02-02 17:43:50
【问题描述】:
python documentation on array 明确指出 array 符合缓冲区接口。它甚至建议不要使用 buffer_info() 方法。但是当我尝试使用 PyObject_GetBuffer() 从 C/C++ 代码中获取 Py_Buffer 或使用 python 的 memoryview 时,我会失败。
例如在python中(我用的是2.7版本):
>>> a = array.array('c')
>>> memoryview(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot make memory view because object does not have the buffer interface
事实上,当我搜索 python 的代码库时,只有 bytearrayobject (bytearray)、memoryobject (memoryview) 和 stringobject (str) 设置了所需的 Py_TPFLAGS_HAVE_NEWBUFFER 标志。据我了解,文档是错误的; 数组不支持缓冲区接口。
我可以使用支持缓冲区接口的字节数组,问题是我需要数组的实用 fromfile() 方法来读取我可以在我的 C/C++ 代码中使用的缓冲区。
是否有替代方法可以让我将文件读入缓冲区并从 C 代码中使用此缓冲区,而不涉及内存副本? (我想处理大的二进制文件,复制是一个不太理想的选择)。
【问题讨论】:
标签: python arrays buffer memoryview pep3118