2017-06-04 72 views
-1

我想删除函数中参数bytes的元素。我希望参数被改变,而不是返回一个新的对象。删除字节对象的前n个元素而不复制

def f(b: bytes): 
    b.pop(0) # does not work on bytes 
    del b[0] # deleting not supported by _bytes_ 
    b = b[1:] # creates a copy of b and saves it as a local variable 
    io.BytesIO(b).read(1) # same as b[1:] 

这里有什么解决方案?

+2

我*想*你只能通过ctypes以非常规方式做到这一点。字节是不可变的,它们不允许突变而不创建新的字节对象。 –

+0

This sucks ..但是因为我只需要它在那个确切点,也许一个非常规的方式会好起来 –

+0

为什么这个要求到位?如果您详细说明可能会找到不同的解决方案。 –

回答

1

只需使用一个bytearray

>>> a = bytearray(b'abcdef') 
>>> del a[1] 
>>> a 
bytearray(b'acdef') 

这几乎就像bytes但可变的:

bytearray类是整数0 < = X < 256,具有范围内的可变序列在Mutable Sequence Types中描述的大多数通常的可变序列方法以及bytes类型具有的大多数方法参见Bytes and Bytearray Operations