本文 AI 產出,尚未審核

Python 基本語法:縮排與程式區塊(4 空格規則)

簡介

在 Python 中,縮排不只是排版美觀的需求,它直接決定程式的執行邏輯。與許多使用大括號 {}end 來劃分程式區塊的語言不同,Python 完全依賴一致的縮排來辨識哪一段程式碼屬於同一個區塊。

掌握正確的縮排規則,能避免 IndentationError、提升程式可讀性,同時讓團隊協作更順暢。對於剛踏入 Python 的新手以及希望寫出乾淨、可維護程式碼的中級開發者來說,熟悉「4 空格」的慣例是必備功課。

核心概念

1. 為什麼選擇 4 空格?

Python 官方文件(PEP 8)建議使用 4 個空格 作為一層縮排的標準。原因包括:

  • 可讀性:4 個空格在視覺上提供足夠的層次感,又不會過於寬闊。
  • 一致性:跨專案、跨團隊使用相同縮排寬度,可減少合併衝突。
  • 兼容性:大多數編輯器與 IDE 預設即支援 4 空格縮排。

注意:切勿混用 Tab空格,除非所有開發者都統一使用 Tab(不建議)。

2. 縮排的基本規則

情況 必須縮排的程式碼 縮排層級
ifelifelse 條件成立時執行的語句 +1
forwhile 迴圈內的每一次執行語句 +1
defclass 函式或類別的內容 +1
tryexceptfinally 例外處理區塊 +1
with 上下文管理區塊 +1

範例:下面的程式碼示範了 iffordef 三種常見區塊的縮排。

def greet(name):
    """傳回問候字串"""
    if name:                     # 條件判斷開始
        for i in range(3):       # 迴圈開始
            print(f"Hello, {name}!")   # 內層語句,縮排 2 層
    else:
        print("Hello, world!")   # else 區塊,同樣縮排 1 層

3. 多行敘述的縮排

當一行程式過長需要斷行時,可使用 反斜線 \圓括號、方括號、大括號自動換行。此時,後續行必須再額外縮排 4 個空格(或更深),以示屬於同一個語句。

# 使用反斜線
total = (price * quantity) \
        - discount + tax

# 使用圓括號(較推薦)
total = (
    price * quantity
    - discount
    + tax
)

4. 空行與縮排的關係

PEP 8 建議在 不同程式區塊之間留一個空行,但空行本身不影響縮排層級。若在同一區塊內插入空行,仍需保持前後行的縮排一致。

def compute():
    result = 0

    # 空行不會改變縮排層級
    for i in range(10):
        result += i

    return result

5. 常見的錯誤訊息

錯誤訊息 可能原因 解決方式
IndentationError: unexpected indent 多餘的縮排或混用 Tab/空格 確認所有行使用相同的縮排字元(建議 4 空格)
IndentationError: expected an indented block 缺少必要的縮排(如 if 後未縮排) 為控制結構添加正確的縮排層級
TabError: inconsistent use of tabs and spaces in indentation 同一檔案內同時使用 Tab 與空格 使用編輯器的「Convert Tabs to Spaces」功能統一為空格

常見陷阱與最佳實踐

  1. 混用 Tab 與空格

    • 陷阱:不同開發環境的 Tab 寬度設定不同,會導致程式在別人機器上跑出錯。
    • 最佳實踐:在 IDE/編輯器中設定 「把 Tab 轉成 4 個空格」,並在 .editorconfigpyproject.toml 中明確規範。
  2. 縮排層級過深

    • 陷阱:過多巢狀會讓程式難以閱讀。
    • 最佳實踐:使用 早期返回(early return)函式抽離策略模式,降低巢狀深度。
  3. 忘記在多行敘述後續行縮排

    • 陷阱:在長列表、字典或函式呼叫斷行時,後續行與前一行對齊,Python 仍會視為新語句。
    • 最佳實踐:在斷行後額外縮排 4 個空格,或使用圓括號自動換行。
  4. 在同一區塊內插入不必要的空行

    • 陷阱:過多空行會使程式看起來斷斷續續。
    • 最佳實踐:遵循 PEP 8 建議:函式內部最多留兩個連續空行,函式與函式之間留一個空行。

實際應用場景

場景 為何縮排重要 範例說明
Web 框架(如 Flask)路由定義 路由函式內的程式碼必須正確縮排,否則會產生 500 錯誤。 python\n@app.route('/')\ndef index():\n return "Hello, World!"\n
資料分析 Pandas 操作 多層條件過濾常使用 iffor,錯誤縮排會導致資料錯亂或程式中斷。 python\nfor col in df.columns:\n if df[col].dtype == 'object':\n df[col] = df[col].str.strip()\n
自動化測試 (pytest) 測試函式須以 def test_... 開頭,內部斷言語句必須縮排。 python\ndef test_sum():\n assert sum([1, 2, 3]) == 6\n
機器學習模型訓練 訓練迴圈與參數設定往往巢狀多層,保持一致縮排可快速定位錯誤。 python\nfor epoch in range(10):\n for batch in loader:\n loss = model(batch)\n loss.backward()\n optimizer.step()\n

總結

  • 縮排是 Python 語法的核心,4 空格已成為事實上的標準。
  • 只要遵守「統一使用空格、每層 4 個、避免混雜 Tab」的原則,就能大幅降低 IndentationError 與可讀性問題。
  • 在實務開發中,設定 IDE、使用 lint 工具(如 flake8、black),讓縮排自動化、標準化,是提升團隊效率的關鍵。

掌握了正確的縮排與程式區塊概念,你就能寫出結構清晰、易於維護的 Python 程式,無論是寫腳本、建置 Web 服務,或是開發機器學習模型,都能事半功倍。祝你在 Python 的道路上越寫越順!