Python 字符串字面量前面的 'b' 字符有什么作用?

2025年1月5日 | 阅读 4 分钟

Python 是一种高级、解释型编程语言,以其简洁易读而闻名。它由 Guido van Rossum 于 1991 年首次推出,并强调代码清晰度,大量使用空格。Python 支持多种编程范式,包括过程式、面向对象和函数式编程。其庞大的标准库提供了用于多种任务的工具,包括 Web 开发、数据分析、人工智能和科学计算。Python 的动态类型和自动内存管理简化了开发和调试。此外,通过 Python 包索引 (PyPI) 可用的庞大的第三方应用程序生态系统进一步扩展了其功能。Python 的社区驱动开发确保了持续改进,并在各种领域得到了广泛应用。

理解 Python 中的字符串

在 Python 中,字符串是 Unicode 字符的不可变序列,用于存储和操作文本。字符串是通过将字符括在单引号、双引号或三引号中创建的。基本操作包括连接、切片和格式化。Python 提供了各种字符串操作方法,例如 `upper()`、`lower()`、`strip()` 和 `replace()`。字符串可以迭代,并使用 `in` 关键字支持成员资格测试。尽管字符串不可变,但字符串操作会返回新的字符串,而不会改变原始字符串。字符串在 Python 中起着基本作用,支持字符串格式化输出和全面的 Unicode 处理等强大功能。

特点

  1. 不可变:字符串创建后无法更改。
  2. 连接:使用 `+` 运算符合并字符串。
  3. 切片:使用 `[start:stop:step]` 访问子字符串。
  4. 格式化:使用 f-strings、`format()` 或 `%` 来嵌入值。
  5. 方法:包括 `upper()`、`lower()`、`strip()`、`replace()`、`split()`、`join()` 等。
  6. 长度:使用 `len()` 获取长度。
  7. 迭代:迭代字符串中的字符。
  8. 成员资格:使用 `in` 关键字检查子字符串是否存在。
  9. 索引:使用索引访问单个字符。
  10. Unicode 支持:处理全球各种字符。
  11. 多行:使用三引号创建多行文本。

什么是字节字面量?

Python 中的字节字面量是一种表示二进制数据的方式,通过在字符串前加上 'b' 或 'B' 字符来定义。这会创建一个 `bytes` 类型的对象,它是一个不可变的字节集合。字节对象与字符串对象 (`str`) 不同,特别适用于处理原始二进制数据,这在文件 I/O、网络通信和数据序列化等任务中很常见。字节字面量可以包含 ASCII 字符,通常用于表示不应被解释为文本的数据。例如,字节字面量 `b"example"` 表示一个字节序列,等同于字符串 "example" 中字符的 ASCII 值。

与字符串不同,字节对象在创建后不能被修改,从而确保了它们所表示的二进制数据的完整性。可以使用 `encode()` 方法(用于字符串)和 `decode()` 方法(用于字节)在字符串和字节之间进行转换,并指定精确的字符编码(例如 UTF8)。这种能力对于需要处理二进制数据和文本数据之间接口的程序至关重要,例如读取二进制文件,然后将其内容解释为文本。

示例

输出

<class 'str'> 
Hello, World! 
<class 'bytes'> 
b'Hello, World!' 
72 
72 101 108 108 111 44 32 87 111 114 108 100 33 

说明

步骤 1: 创建常规字符串

  • `string_literal` 是一个常规字符串对象。
  • 打印其类型显示 `<class 'str'>`。
  • 打印字符串显示 `Hello, World!`。

步骤 2: 创建字节字面量

  • `bytes_literal` 是通过在字符串前加上 `b` 来创建的。
  • 打印其类型显示 `<class 'bytes'>`。
  • 打印字节字面量显示 `b'Hello, World!'`,表明它是一个字节对象。

步骤 3: 访问元素:访问 `bytes_literal` 中的元素(例如 `bytes_literal[0]`)会返回字节值 `72`,这是 `H` 的 ASCII 码。

步骤 4: 迭代字节

  • 迭代 `bytes_literal` 会打印序列中的每个字节值。
  • 这表明了原始字符串中字符的 ASCII 值。

优点

  1. 高效地处理二进制数据。
  2. 适用于网络通信。
  3. 不可变性保证了数据完整性。
  4. 支持索引和切片等操作。
  5. 与二进制文件 I/O 操作兼容。

缺点

  1. 仅限于 ASCII 字符。
  2. 非 ASCII 数据需要编码/解码。
  3. 与字符串相比,可读性较差。
  4. 在某些情况下,不可变性可能受限。
  5. 可能需要额外的 Unicode 字符处理。