Lazy loaded image
后端
掌握Python字符串前缀:b, r, u, f 的含义与妙用
字数 2329阅读时长 6 分钟
2023-12-27
2025-5-14
type
status
date
slug
summary
tags
category
icon
password
 
在Python编程中,我们经常会在字符串字面量前看到一些特殊的字母前缀,如bruf。这些前缀赋予了字符串特殊的含义和功能,理解它们对于编写高效、准确的Python代码至关重要。本文将详细解析这些前缀的作用,并通过示例代码展示它们在实际开发中的应用场景。

前缀“b”:字节字符串 (Bytes)

当字符串前添加前缀“b”时,它定义了一个字节字符串 (bytes)。与常规的Unicode字符串 (str) 不同,字节字符串的每个元素是一个介于0到255之间的整数(即一个字节)。字节字符串主要用于处理二进制数据,例如读取或写入图片、音频、视频等文件,或者在网络通信中传输原始字节流。
核心特性:
  • 表示原始字节序列。
  • 元素是0-255范围的整数。
  • 支持特定的方法,如 decode() 将字节解码为Unicode字符串,而Unicode字符串则有 encode() 方法将其编码为字节。
示例1:读取二进制文件内容 假设我们有一个二进制文件(或任何你想以字节形式读取的文件),例如 image.jpg 或一个简单的文本文件 data.bin
示例2:发送HTTP POST请求传输二进制数据 当需要通过HTTP POST请求上传文件或发送原始字节流时,字节字符串非常有用。

前缀“r”:原始字符串 (Raw String)

前缀“r”定义了一个原始字符串 (raw string)。在原始字符串中,反斜杠 (\\) 不被视为转义字符的开始,而是被当作普通的字面字符处理。这在处理正则表达式、Windows文件路径等需要大量反斜杠的场景中非常方便,可以避免使用双反斜杠 (\\\\) 来转义。
核心特性:
  • 反斜杠按字面意义解释,不进行转义。
  • 唯一的例外是字符串末尾的反斜杠不能单独存在(即 r"..." 不能以奇数个反斜杠结尾,除非这个反斜杠是用来转义引号的)。
示例1:使用正则表达式匹配文本中的URL 注意:示例中的正则表达式 r'https:\\\\\\\\[\\w\\.]+\\\\[\\w\\.]+[/\\w]*' 是为了匹配包含双反斜杠的特定格式URL。
示例2:构建Windows文件路径 Windows文件路径通常使用反斜杠作为分隔符,使用原始字符串可以使路径更易读。

前缀“u”:Unicode字符串 (主要针对Python 2)

前缀“u”用于显式声明一个Unicode字符串。这在Python 2中至关重要,因为Python 2区分了两种字符串类型:默认的str(字节字符串,通常是ASCII或特定编码)和unicode(Unicode字符串)。
在Python 3中:
  • 所有字符串字面量(不带b前缀的)默认就是Unicode (str类型)
  • u前缀在Python 3.0-3.2中是允许的,但没有任何实际效果,因为字符串已经是Unicode了。
  • 从Python 3.3开始,u前缀不再是有效的语法,使用它会导致SyntaxError
因此,关于u前缀的讨论主要集中在其历史意义以及与Python 2的兼容性上。
示例1:Python 2 vs Python 3 字符串类型
示例2:Python 3中写入文件(编码处理) 在Python 3中,由于字符串默认是Unicode,写入文件时直接指定编码即可,无需u前缀。
对于Python 2代码迁移到Python 3,理解这种差异非常重要。通常,Python 2中所有期望处理文本的地方都应该使用unicode对象(即带u前缀的字符串或解码后的字节串)。

前缀“f”:格式化字符串字面量 (f-string)

前缀“f”或“F”引入了格式化字符串字面量 (formatted string literals),简称f-string。f-string是在Python 3.6中引入的一种强大的字符串格式化机制,它允许在字符串字面量中直接嵌入表达式。这些表达式在运行时会被其值替换。
核心特性:
  • fF开头。
  • 花括号{}内可以包含Python表达式,包括变量、算术运算、函数调用等。
  • 表达式后可以跟可选的格式说明符(类似于.format()方法中的格式规范)。
  • 通常比传统的 % 格式化或 str.format() 方法更简洁、可读性更高且效率也可能更高。
示例1:使用f-string构建动态查询语句
示例2:在f-string中使用表达式进行数值计算和格式化

总结

Python中的字符串前缀为我们处理不同类型的文本和数据提供了极大的灵活性:
  • b"" (字节字符串): 用于处理原始二进制数据,如文件I/O和网络编程。
  • r"" (原始字符串): 用于需要字面反斜杠的场景,如正则表达式和Windows路径,避免过度转义。
  • u"" (Unicode字符串): 主要用于Python 2中显式定义Unicode文本。在Python 3中,字符串默认即为Unicode,此标记已废弃。
  • f"" (f-string): Python 3.6+ 引入的强大、易读的字符串格式化方法,允许在字符串中直接嵌入表达式。
理解并恰当使用这些字符串前缀,可以使您的Python代码更加清晰、高效,并能更好地处理各种数据类型和编码问题。
上一篇
Vue Router 4 params传参失效?详解 Extraneous non-declared params 警告及解决方案
下一篇
Vue组件通信新思路:巧用Provide/Inject与Ref优化兄弟组件交互