相关疑难解决方法(0)

为什么不能从数组对象中获取Py_buffer?

数组上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代码中的缓冲区,而不涉及内存副本?(我想处理大二进制文件,复制是一个不太理想的选择).

python arrays buffer memoryview pep3118

6
推荐指数
1
解决办法
2549
查看次数

标签 统计

arrays ×1

buffer ×1

memoryview ×1

pep3118 ×1

python ×1