Python 缓冲区类型有什么用? [英] What is Python buffer type for?

查看:58
本文介绍了Python 缓冲区类型有什么用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Python 文档中的描述是:

<块引用>

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

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

解决方案

示例用法:

<预><代码>>>>s = '你好世界'>>>t = 缓冲区(s, 6, 5)>>>吨<0x10064a4b0 的只读缓冲区,大小为 5,0x100634ab0 处的偏移量为 6>>>>打印 t世界

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

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

<预><代码>>>>s = bytearray(1000000) # 一百万归零字节>>>t = buffer(s, 1) # slice 切掉第一个字节>>>s[1] = 5 # 设置s中的第二个元素>>>t[0] # 现在也是 t 中的第一个元素!'\x05'

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

请注意,buffer 已被替换为在 Python 3 中更好地命名 memoryview,虽然你可以在 Python 2.7 中使用.

另请注意,如果不深入研究 C API,您就无法为自己的对象实现缓冲区接口,即无法在纯 Python 中实现.

There is a buffer type in python, but I don't know how can I use it.

In the Python doc the description is:

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

The object argument must be an object that supports the buffer call interface (such as strings, arrays, and buffers). A new buffer object will be created which references the object argument. The buffer object will be a slice from the beginning of object (or from the specified offset). The slice will extend to the end of object (or will have a length given by the size argument).

解决方案

An example usage:

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

The buffer in this case is a sub-string, starting at position 6 with length 5, and it doesn't take extra storage space - it references a slice of the string.

This isn't very useful for short strings like this, but it can be necessary when using large amounts of data. This example uses a mutable 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'

This can be very helpful if you want to have more than one view on the data and don't want to (or can't) hold multiple copies in memory.

Note that buffer has been replaced by the better named memoryview in Python 3, though you can use either in Python 2.7.

Note also that you can't implement a buffer interface for your own objects without delving into the C API, i.e. you can't do it in pure Python.

这篇关于Python 缓冲区类型有什么用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆