在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

關鍵區別總結

前綴

類型

特點

f

str

格式化字符串,支持{}內嵌入變量或表達式(如f"{name} is {age}")。

r

str

原始字符串,反斜槓\視為普通字符(如r"\n"是兩個字符)。

b

bytes

字節字符串,存儲二進制數據(如b"hello")。

u

str

Python 3中無實際效果(兼容Python 2的Unicode標識)。

"""/'''

str

多行字符串,保留換行和縮進。

注意事項

  • 組合前綴順序frrf是合法的,但rf在邏輯上等價於fr(先處理原始字符串,再格式化)。
  • 字節字符串的轉義:在b字符串中,\n等轉義字符仍會被轉義,但\xHH(十六進制)是有效的(如b"\x48"表示H)。
  • 原始字符串的限制:原始字符串不能以單個反斜槓結尾(如r"\"會報錯),因為Python無法確定是否需要轉義。

通過這些前綴,Python提供了靈活處理不同場景下字符串需求的能力,從格式化輸出到二進制數據處理,覆蓋了廣泛的使用場景。