用于创建不可变的字节序列对象
1. 基本语法与参数
bytes(source=b'', encoding=None, errors=None)
- 参数:
- `source`:可选参数,指定初始化数据来源,可以是以下类型:
- 整数:创建指定长度的空字节序列(默认填充`\x00`)。
- 字符串:需配合`encoding`参数(如`utf-8`)转换为字节序列。
- 可迭代对象:包含0-255范围内整数的列表、元组等。
- 缓冲区对象(如`bytearray`):复制其内容。
- `encoding`:字符串编码方式(仅当`source`为字符串时有效)。
- `errors`:编码错误处理策略(如`strict`、`ignore`)。
- 返回值:不可变的字节序列对象(`bytes`类型)。
示例:
#创建空字节序列
b1 = bytes() b''
#从整数创建(长度为5,初始化为0)
b2 = bytes(5) b'\x00\x00\x00\x00\x00'
# 从可迭代对象创建
b3 = bytes(72, 101, 108, 108, 111) b'Hello'
#从字符串创建(需编码)
b4 = bytes("你好", "utf-8") b'\xe4\xbd\xa0\xe5\xa5\xbd'
2. 核心特性
(1) 不可变性
与`bytearray`不同,`bytes`对象一旦创建无法修改:
b = bytes(65, 66, 67)
try:
b0 = 68 触发TypeError
except TypeError as e:
print(e) 'bytes' object does not support item assignment
(2) 序列操作
支持切片、拼接、重复等操作:
b = bytes(97, 98, 99)
b1:3 = b'XY' 替换切片(需长度一致)
print(b) b'axyz'
3. 常用创建方式
(1) 空字节序列
empty = bytes() #b''
(2) 指定长度
fixed_len = bytes(3) #b'\x00\x00\x00'
(3) 字符串编码
text = "Python"
encoded = bytes(text, "utf-8")# b'Python'
(4) 可迭代对象
nums = 65, 66, 67
ba = bytes(nums)# b'ABC'
4. 典型应用场景
(1) 二进制数据处理
直接操作二进制数据(如文件读写、网络协议解析):
#读取文件二进制内容
with open("image.png", "rb") as f:
data = bytes(f.read())
(2) 编码转换
将字符串转换为二进制格式:
text = "你好"
b = bytes(text, "utf-8") b'\xe4\xbd\xa0\xe5\xa5\xbd'
(3) 性能优化
相比`bytearray`,`bytes`的不可变性使其在哈希计算、字典键等场景更高效:
data = bytes(1, 2, 3, 4)
hash_value = hash(data) #快速计算哈希值
5. 注意事项
1. 编码错误处理
字符串转`bytes`时需处理编码错误:
#非ASCII字符使用ASCII编码会报错
bytes("中国", "ascii") UnicodeEncodeError
#使用errors参数忽略错误
bytes("中国", "ascii", errors="ignore") b''
2. 不可变性限制
修改操作需重新创建新对象:
b = b'abc'
new_b = b:2 + b'X' #创建新对象b'abX'
3. 与`bytearray`的区别
- `bytes`不可变,`bytearray`可变。
- `bytes`适用于二进制数据存储,`bytearray`适用于动态修改场景。
6. 实际代码示例
(1) 文件内容读取
with open("data.bin", "rb") as f:
content = bytes(f.read())
print(content) 输出文件二进制内容
(2) 字符串与字节互转
text = "Hello"
字符串转bytes
b = text.encode("utf-8") b'Hello'
bytes转字符串
s = b.decode("utf-8") "Hello"
(3) 自定义协议解析
#解析自定义二进制协议(头部4字节长度 + 数据)
data = bytes(0, 0, 0, 5, 104, 101, 108, 108, 111)
length = int.from_bytes(data0:4, "big")
payload = data4:4+length
print(payload) b'hello'
总结
`bytes()`是处理二进制数据的基础工具,其不可变性和高效性使其在文件操作、网络通信及加密算法中广泛应用。通过灵活运用构造方法、编码转换及序列操作,开发者能高效实现复杂的数据处理逻辑。