在 Python 中,字符串字面量(string literals)可以使用**前缀(prefixes)**来指定其类型或行为。目前官方支持的字符串前缀主要有以下 4 种:
✅ 1. r ------ 原始字符串(Raw String)
-
作用 :禁用反斜杠
\的转义功能,所有字符按字面意思处理。 -
返回类型 :
str -
典型用途:正则表达式、Windows 文件路径
-
示例 :
r'\n\t' # 字符串内容是:\n\t(4个字符) r'C:\Users' # 不会因 \U 被误解析为 Unicode 转义
✅ 2. f ------ 格式化字符串(Formatted String Literal,f-string)
-
作用 :在字符串中嵌入表达式(用
{}包裹),Python 3.6+ 引入 -
返回类型 :
str -
典型用途:动态拼接变量、调用函数等
-
示例 :
name = "Alice" f"Hello, {name.upper()}!" # → 'Hello, ALICE!'
💡 可与
r组合:rf'C:\Users\{name}'
✅ 3. b ------ 字节字符串(Bytes Literal)
-
作用 :创建
bytes对象(不是字符串!) -
返回类型 :
bytes -
典型用途:网络协议、文件二进制读写、加密、哈希等
-
注意:只能包含 ASCII 字符(非 ASCII 需显式编码)
-
示例 :
b'hello' # → b'hello' (类型是 bytes) type(b'abc') # → <class 'bytes'>
✅ 4. u ------ Unicode 字符串(Unicode Literal)
-
作用 :显式声明字符串为 Unicode(仅在 Python 2 中有意义)
-
返回类型 :
str(Python 3 中所有字符串默认就是 Unicode) -
现状 :Python 3 中
u'...'与'...'完全等价,主要用于兼容旧代码或强调语义 -
示例 :
u"你好" # Python 3 中和 "你好" 没区别
🧩 组合规则
| 组合 | 是否合法 | 说明 |
|---|---|---|
fr 或 rf |
✅ 合法 | 原始格式化字符串(如 rf'\n{var}') |
rb 或 br |
❌ 非法 | 语法错误(不能同时是 str 和 bytes) |
fb、uf 等 |
❌ 非法 | 不支持 |
📌 总结表
| 前缀 | 全称 | 类型 | 主要用途 |
|---|---|---|---|
r |
raw string | str |
避免 \ 转义(正则、路径) |
f |
formatted string | str |
插入变量/表达式(推荐格式化方式) |
b |
bytes literal | bytes |
处理二进制数据 |
u |
unicode literal | str |
Python 2 兼容(Python 3 可省略) |
⚠️ 注意:前缀不区分大小写 (如
R"..."、F"..."也合法),但惯例使用小写。
这些前缀让 Python 能灵活处理文本、二进制、动态内容和特殊格式,是日常开发中的重要工具!