关于python中的Buffer接口

时间:2013-07-05 18:48:06

标签: python python-2.7 python-3.x pybuffer pep3118

我对python中的术语'缓冲接口'很困惑。什么意思说“一个暴露其底层内存结构的python对象'可以用某个例子解释一下。提前谢谢

1 个答案:

答案 0 :(得分:3)

“基础内存结构”是指包含计算机内存中对象的八位字节序列。例如,当您创建字符串"abc"时,Python必须保留至少3个字节的内存并存储字母abc。如果内存是连续的(如字符串的情况),它的地址和大小可以传递给任何想要检查它的C代码而不需要经过Python str类型的开销。

一个有用的例子是array类型。数组是一个与Python列表非常相似的序列,区别在于它包含单类型元素 - 您可以拥有一个int数组和一个浮点数组,但不能将它们混合使用。好处是数组尽可能高效地打包数据,将它们存储在一个扁平的C数组中。此数组通过缓冲区接口公开 - 它允许查询底层C数组的确切内存位置和大小,并将其传递给某个C函数,该函数将有效地初始化它或将其写入磁盘。 numpy数字包是围绕Python和C(甚至FORTRAN)之间的这种数据共享构建的,为此他们扩展了缓冲协议,其中一些扩展使其成为Python 3。

mmap对象提供了OS级别内存映射功能的Python接口,还提供了一个缓冲区接口。这使得必须有效访问内存的C代码(例如re模块)也可以使用内存映射区域。