Python内置函数---bytearray()

用于创建可变的字节数组对象,支持动态修改其内容。

 1. 基本语法与参数

bytearray(source=b'', encoding=None, errors=None)

        - 参数:

        - `source`:可选参数,指定初始化数据来源,可以是以下类型:

        - 字符串:需配合`encoding`参数(如`utf-8`)转换为字节序列。

        - 整数:创建指定长度的字节数组,所有字节初始化为`0`。

        - 可迭代对象:包含0-255范围内整数的列表、元组等。

        - 缓冲区对象(如`bytes`):复制其内容。

        - `encoding`:字符串编码方式(仅当`source`为字符串时有效)。

        - `errors`:编码错误处理策略(如`strict`、`ignore`)。

        - 返回值:可变的字节数组对象。

示例:

 #创建空字节数组

ba1 = bytearray() bytearray(b'')

#从整数创建(长度为5,初始化为0)

ba2 = bytearray(5) bytearray(b'\x00\x00\x00\x00\x00')

 #从可迭代对象创建

ba3 = bytearray(72, 101, 108, 108, 111) bytearray(b'Hello')

 #从字符串创建(需编码)

ba4 = bytearray("你好", "utf-8") bytearray(b'\xe4\xbd\xa0\xe5\xa5\xbd')

 2. 核心特性

 (1) 可变性

        与`bytes`不同,`bytearray`支持动态修改元素:

ba = bytearray(b'hello')

ba0 = ord('H') 修改首字节为'H'的ASCII码

print(ba) bytearray(b'Hello')

 (2) 序列操作

支持切片、拼接、重复等操作:

ba = bytearray(b'abc')

ba1:3 = b'xyz' 替换切片

print(ba) bytearray(b'axyz')

 3. 常用方法

 (1) 修改类方法

方法功能描述示例 
append(int)在末尾追加一个字节 ba.append(97) → `b'ab
extend(iterable)追加多个字节 ba.extend(98, 99) → `b'abc'` 
insert(index, int)在指定位置插入字节 `ba.insert(1, 98)→ `b'abb'` 
remove(int)移除第一个匹配的字节 `ba.remove(98) → `b'ac'` 
pop(index)移除并返回指定索引的字节(默认末尾)ba.pop()` → `99`
reverse()反转字节数组ba=b'abc' → b`cba`

 (2) 搜索与统计

方法功能描述示例 
count(x)统计字节`x`出现的次数ba.count(97)` → `1` 
index(x)返回第一个匹配字节的索引`ba.index(98)` → `1` 
find(x)类似`index()`,未找到返回ba.find(99)` → `2` 

 (3) 其他方法

方法功能描述示例 
decode()将字节数组解码为字符串ba = b'abc' → 'abc'` 
hex()返回十六进制字符串表示ba = b'\x01\x02' → '0102'` 
fromhex(string)类方法,从十六进制字符串创建数组`bytearray.fromhex('0102')` 

 4. 典型应用场景

 (1) 二进制数据处理

        直接操作二进制数据(如文件读写、网络协议解析):

# 读取文件二进制内容并修改

with open("data.bin", "rb") as f:

    data = bytearray(f.read())

data0 = 0x01 #修改首字节

 (2) 动态编码转换

        处理需要动态修改的编码数据:

text = "Hello, 世界"

ba = bytearray(text, "utf-8")

ba7:9 = bytearray("Python", "utf-8") 替换部分内容

print(ba) bytearray(b'HelloPython')

 (3) 性能优化

        相比`bytes`,`bytearray`的修改操作更高效:

 #高频修改场景(如图像处理)

pixels = bytearray(1000000)# 初始化百万字节

for i in range(len(pixels)):

    pixelsi = 255 - pixelsi #反色处理

 5. 注意事项

1. 类型限制  

           `bytearray`仅支持0-255的整数,非整数类型会触发`TypeError`:

  bytearray(256) #ValueError: bytes must be in range(0, 256)

2. 编码错误处理  

           字符串转`bytearray`时需处理编码错误:

bytearray("你好", "ascii", errors="ignore") #忽略无法编码的字符

3. 与`bytes`的区别  

   - `bytes`不可变,`bytearray`可变。

   - `bytearray`支持更多修改方法(如`append`、`remove`)。

   - `bytearray`初始化时默认填充`0`,而`bytes()`生成空对象。

 6. 实际代码示例

 (1) 动态修改字节

ba = bytearray(b'abcd')

ba1:3 = b'XY' #替换索引1-2的字节

print(ba) bytearray(b'aXcd')

 (2) 文件内容加密

 #简单异或加密

with open("secret.txt", "rb") as f:

    data = bytearray(f.read())

for i in range(len(data)):

    datai ^= 0xFF 按位取反

with open("encrypted.bin", "wb") as f:

    f.write(data)

 (3) 自定义协议解析

 #解析自定义二进制协议(头部4字节长度 + 数据)

data = bytearray(b'\x00\x00\x00\x05hello')

length = int.from_bytes(data0:4, "big")

payload = data4:4+length

print(payload) bytearray(b'hello')

 总结

        `bytearray()`是处理动态二进制数据的核心工具,其可变性和高效性使其在网络编程、文件处理及加密算法中广泛应用。通过灵活运用构造方法、修改方法和编码转换功能,开发者能高效实现复杂的数据操作逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值