首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python缓冲区类型是用来做什么的?

Python缓冲区类型是用来做什么的?
EN

Stack Overflow用户
提问于 2010-08-06 17:55:45
回答 2查看 160.7K关注 0票数 144

python中有一个buffer类型,但我不知道如何使用它。

Python doc中,描述为:

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-06 18:05:05

示例用法:

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
>>> 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'

如果您希望在数据上有多个视图,并且不想(或不能)在内存中保存多个副本,这将非常有用。

请注意,在Python3中,buffer已经被命名更好的memoryview所取代,尽管您可以在Python2.7中使用这两个名称。

还要注意的是,如果不深入研究C API,就不能为自己的对象实现buffer接口,也就是说,不能用纯Python实现。

票数 155
EN

Stack Overflow用户

发布于 2010-08-07 03:59:34

我认为buffers在将python连接到本地库时非常有用。(Guido van Rossum在this mailinglist post中解释了buffer )。

例如,numpy似乎使用buffer进行高效的数据存储:

代码语言:javascript
复制
import numpy
a = numpy.ndarray(1000000)

a.data是:

代码语言:javascript
复制
<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3422685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档