有一个 buffer 输入python,但我不知道如何使用它。

在里面 Python 文档 描述是:

buffer(object[, offset[, size]])

对象参数必须是支持缓冲区调用接口的对象(例如字符串、数组和缓冲区)。将创建一个引用对象参数的新缓冲区对象。缓冲区对象将是从对象开头(或从指定偏移量开始)的切片。切片将延伸到对象的末尾(或者将具有由大小参数指定的长度)。

有帮助吗?

解决方案

用法示例:

>>> s = 'Hello world'
>>> t = buffer(s, 6, 5)
>>> t
<read-only buffer for 0x10064a4b0, size 5, offset 6 at 0x100634ab0>
>>> print t
world

本例中的缓冲区是一个子字符串,从位置 6 开始,长度为 5,并且它不占用额外的存储空间 - 它引用字符串的一个切片。

这对于像这样的短字符串来说不是很有用,但在使用大量数据时可能是必要的。这个例子使用了一个可变的 bytearray:

>>> s = bytearray(1000000)   # a million zeroed bytes
>>> t = buffer(s, 1)         # slice cuts off the first byte
>>> s[1] = 5                 # set the second element in s
>>> t[0]                     # which is now also the first element in t!
'\x05'

如果您想要对数据有多个视图并且不想(或不能)在内存中保存多个副本,这会非常有帮助。

注意 buffer 已被名称更好的替代 memoryview 在 Python 3 中,尽管您可以在 Python 2.7 中使用其中之一。

另请注意,如果不深入研究 C API,则无法为自己的对象实现缓冲区接口,即你不能用纯 Python 来做到这一点。

其他提示

我想的缓冲剂是例如有用接口蟒蛇时,本机库。 (吉多·范罗苏姆解释这个邮件列表帖子 )。

例如,numpy的似乎使用缓冲器,用于高效的数据存储:

import numpy
a = numpy.ndarray(1000000)

a.data是:

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top