正确的python方式来清除bytearray

时间:2016-04-15 17:50:05

标签: python bytearray

我想念memset。我在一个类中有一个帧缓冲区,它有一些来自其他操作的数据,现在我想将该帧缓冲区中的所有内容清除为0x00或0xFF。我没有在文档中看到明确的方法,有一个zfill方法可能有效。我想过再次调用字节数组的init方法,但想知道这是否会给我带来一些内存问题。

我正在使用python 2.7。

3 个答案:

答案 0 :(得分:5)

Python 不是C ,在这里你根本不需要担心内存。你只是这样做:

a = bytearray("abcd") # initialized it with real data

a = bytearray(5) # just a byte array of size 5 filled with zeros

答案 1 :(得分:4)

In [1]: ba = bytearray(range(100))

In [2]: ba
Out[2]: bytearray(b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abc')

In [3]: ba[:] = b'\x00' * len(ba)

In [4]: ba
Out[4]: bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')

答案 2 :(得分:3)

如果您想对帧缓冲区进行高性能操作,请考虑使用NumPy。您可以将帧缓冲区表示为uint8的NumPy数组:

import numpy as np
fb = np.zeros((480, 640), dtype=np.uint8) # a 640x480 monochrome framebuffer

然后非常简单地清除帧缓冲区:

fb[:] = 0 # or fb[:] = 0xff

另一个很大的优势是你可以获得一个快速的2D数组 - 你可以像fb[80:120, 40:60]这样的东西来便宜地得到一个矩形区域,你可以用非常少的代码实现像blitting这样的绘制操作。另外,使用np.tobytes,您仍然可以获得字节表示。