在Python中,字符串字面量可以通過前綴修飾以改變其處理方式或語義。除了常見的f"hello"(格式化字符串)和r"hello"(原始字符串),還有以下幾種核心用法:
1. b"hello":字節字符串(Bytes Literal)
- 表示一個字節序列(類型為
bytes),而非Unicode字符串。 - 示例:
data = b"hello" # 類型為bytes,存儲的是二進制數據
print(type(data)) # <class 'bytes'>
- 常用於處理二進制數據(如文件、網絡傳輸)。
2. u"hello":Unicode字符串(歷史遺留,Python 3中已默認)
- 在Python 2中用於顯式聲明Unicode字符串(與普通字符串
str區分),但在Python 3中所有字符串默認均為Unicode,因此u前綴不再有實際效果,僅保留兼容性。 - 示例:
s = u"hello" # Python 3中等價於"hello"
print(type(s)) # <class 'str'>
3. 三引號字符串("""或'''):多行字符串
- 使用三引號(單引號或雙引號)可定義跨多行的字符串,自動包含換行符和縮進。
- 示例:
multi_line = """
Line 1
Line 2
Indented Line
"""
print(multi_line)
# 輸出:
# Line 1
# Line 2
# Indented Line
4. 組合前綴:fr"hello"、rb"hello"等
- 多個前綴可以組合使用(順序通常為
r/f在前,b在後),例如:
fr"name: {name}":原始格式化字符串(先處理原始字符串的轉義,再格式化)。rb"data":原始字節字符串(字節序列中的\n等不會被轉義)。
- 示例:
name = "John"
s = fr"Path: C:\Users\{name}" # 原始字符串 + 格式化,\U不會被轉義為Unicode轉義
print(s) # 輸出:Path: C:\Users\John
5. 隱式轉義處理:普通字符串的默認行為
- 無前綴的普通字符串(如
"hello")會正常處理轉義字符(如\n換行、\t製表符)。 - 示例:
s = "Hello\nWorld" # 包含換行符
print(s)
# 輸出:
# Hello
# World
關鍵區別總結
|
前綴
|
類型
|
特點
|
|
|
|
格式化字符串,支持 |
|
|
|
原始字符串,反斜槓 |
|
|
|
字節字符串,存儲二進制數據(如 |
|
|
|
Python 3中無實際效果(兼容Python 2的Unicode標識)。
|
|
|
|
多行字符串,保留換行和縮進。
|
注意事項
- 組合前綴順序:
fr和rf是合法的,但rf在邏輯上等價於fr(先處理原始字符串,再格式化)。 - 字節字符串的轉義:在
b字符串中,\n等轉義字符仍會被轉義,但\xHH(十六進制)是有效的(如b"\x48"表示H)。 - 原始字符串的限制:原始字符串不能以單個反斜槓結尾(如
r"\"會報錯),因為Python無法確定是否需要轉義。
通過這些前綴,Python提供了靈活處理不同場景下字符串需求的能力,從格式化輸出到二進制數據處理,覆蓋了廣泛的使用場景。