当前位置: 首页 > news >正文

Python内置函数---bytes()

        用于创建不可变的字节序列对象

 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 触发TypeErrorexcept 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, 67ba = 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"字符串转bytesb = 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+lengthprint(payload) b'hello'

总结

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

相关文章:

  • MySQL基础增删改
  • CDN加速http请求
  • 百万点数组下memset、memcpy与for循环效率对比及原理分析
  • 【大模型与AIGC深度解析】从核心概念到行业应用
  • Python实现孔填充与坐标转换
  • 网络编程——通信三要素
  • GitLab_密钥生成(SSH-key)
  • 第4天:Linux开发环境搭建
  • 【JavaScript】详讲运算符--算术运算符
  • 时间自动填写——电子表格公式的遗憾(DeepSeek)
  • 品融电商:领航食品类目全域代运营,打造品牌增长新引擎
  • EasySearch 服务昨天还好好的,为什么今天突然访问不了了?
  • Java面试题汇总
  • FI固定资产折旧码的功能用途及其配置介绍
  • 【CSS】层叠,优先级与继承(三):超详细继承知识点
  • 推荐系统排序阶段核心要点:多目标排序模型详解
  • UnoCSS原子CSS引擎-前端福音
  • 15.FineReport动态展示需要的列
  • 数据库-基本概述 和 SQL 语言
  • 记录一次OGG进程abended,报错OGG-01431、OGG-01003、OGG-01151、OGG-01296问题的处理
  • 一夜跌去200美元,黄金巨震冲上热搜!涨势已近尾声?
  • 内蒙古已评出280名“担当作为好干部”,186人提拔或晋升
  • 什么是中国好手艺?材美、工巧、器韵、时宜
  • 广西气象干旱面积97.5%,影响人畜饮水、农业生产
  • IPO周报|本周暂无新股申购,上周上市新股中签浮盈均超1.6万
  • 俄乌互指对方未遵守复活节临时停火提议