Dav*_*vid 6 python arrays buffer memoryview pep3118
数组上的python文档清楚地表明该数组符合缓冲区接口.它甚至建议不使用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
Run Code Online (Sandbox Code Playgroud)
实际上,当我搜索python的代码库时,只有bytearrayobject(bytearray),memoryobject(memoryview)和stringobject(str)在它们上面设置了所需的Py_TPFLAGS_HAVE_NEWBUFFER标志.据我了解,文档是错误的; 数组不支持缓冲区接口.
我可以使用支持缓冲区接口的bytearray,问题是我需要数组的实用fromfile()方法来读取我可以在我的C/C++代码中使用的缓冲区.
有没有一种方法可以让我将文件读入缓冲区并使用C代码中的缓冲区,而不涉及内存副本?(我想处理大二进制文件,复制是一个不太理想的选择).
memoryview仅适用于支持 Python 3 缓冲区接口的对象。array.array在 Python 3 中可以,但在 Python 2.7 中不行。您可能希望为此提交错误报告。只需使用 use bytearray(或者str如果您以只读方式使用它)。两个都支持memoryview就好。