SERVE_R_RESPONSE = b""" ... """,這是註解嗎?初學者常誤以為三引號 """ ... """ 是「多行註解」,其實 **Python 沒有多行註解語法**,三引號只是**多行字串字面值**。若未賦值給變數、未作為表達式語句獨立存在,它只是會被建立後立即丟棄的字串物件,看起來像註解而已。
b""" ... """| 符號 | 含義 |
|---|---|
""" ... """ | 三引號字串:可跨行、保留換行與縮排、可包含單雙引號不需跳脫 |
b 前綴 | Python 3 引入的 **bytes 字面值前綴**,表示這是 bytes 型別而非 str(Unicode 字串) |
# Python 3
s = """這是 str (Unicode)"""
b = b"""這是 bytes (ASCII/二進位)"""
type(s) #
type(b) #
str 就是位元組串,u"""...""" 才是 Unicode。b"""...""" 語法存在但 b 被忽略,等同無前綴。str (Unicode) 與 bytes。網路傳輸、檔案 I/O、二進位協定**必須用 bytes**。b"""...""" 是產生 bytes 字面值的標準寫法。# Python 2 相容層
try:
# Py3 已有 bytes
pass
except NameError:
# Py2
b = lambda x: x
bytes = str
response = b\"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<html>...\"packet = b\"\\x01\\x02\\x03\\x04\"open('data.bin', 'wb').write(b\"\\x00\" * 1024)「三引號是註解」→ 錯。它是字串字面值。真正的註解只有
#單行註解。
「b是註解標記」→ 錯。b是 bytes 型別前綴,與註解無關。
「Python 2 沒有 bytes」→ 半對。Py2 的str即 bytes,但語意不清,建議移植到 Py3 明確區分。
b""" ... """ = bytes 型別的多行字串字面值。Python 3 強制 Unicode/bytes 分離,處理網路、檔案、二進位資料時**必須用 bytes**,這語法就是為此而生。別把它當註解,它是會佔記憶體、能傳輸、能寫檔的真實資料物件。