ToolAct工具行動

Python 格式化工具

輸入 Python
輸出結果
行數: 1字元數: 0字節數: 0
行數: 1字元數: 0

什麼是 Python 格式化?

Python 格式化工具會用一致的縮排、換行和結構整理 Python 程式碼。Python 的縮排本身就是語法的一部分,因此複製混亂或風格混雜的程式碼不只是難看,還可能改變行為或直接報錯。這個工具適合處理腳本、Notebook 片段、產生程式碼、學習範例、程式碼審查和小型重構,讓函式、類別、import、列表、字典和巢狀表達式更容易閱讀。格式化不會修復邏輯錯誤、型別問題、缺少依賴、執行環境問題或 API 誤用。在真實專案中,輸出應與 Black、Ruff、isort 或團隊規範保持一致。

使用說明

使用方式

  1. 在左側輸入框貼上或輸入 Python 程式碼
  2. 選擇縮排大小(2 格、4 格或 Tab)
  3. 點選「格式化」美化程式碼,或點選「壓縮」精簡程式碼
  4. 在右側檢視結果(含語法高亮)
  5. 點選「複製」將結果複製到剪貼簿

選項說明

縮排大小可選擇 2 格、4 格或 Tab 縮排。PEP 8 建議使用 4 格空白。
格式化以正確的縮排和換行美化程式碼
壓縮移除空白與註解以縮減檔案大小

Python 提示

  • Python 對縮排非常敏感,複製結果回專案前請先檢查格式化後的控制區塊。
  • 格式化不會執行型別檢查、匯入檢查或測試,請使用您的 Python 工具鏈來驗證行為與相依性。

使用場景

清理貼上的 Python 程式碼同時保留字串和註解當程式碼片段有不一致的縮排、多餘空行或從聊天室、Wiki、Issue 複製來的空白時,使用格式化工具。它會在正規化縮排之前保護引號字串、三引號區塊和註解,因此文件文字和行內註記不會被意外改寫。輸出結果可以直接放入 README 或 Stack Overflow 回答,不會觸發額外的重新格式化。
在分享程式碼前抓出簡單的括號和字串錯誤工具會在產生輸出前驗證配對的圓括號、方括號、花括號和未關閉的三引號字串。它不是完整的 Python 直譯器或 Black 替代品,但能抓出小範例、教學和支援回覆中的明顯結構錯誤。將格式化工具搭配 CI 中的正式 linter 使用,可以捕捉格式化器看不到的邏輯層級問題。
在可讀輸出和緊湊的單行程式碼之間切換可選擇 2 空格、4 空格或 Tab 作為格式化輸出的縮排,也可將程式碼壓縮為以分號分隔的緊湊形式,方便用於簡短展示和嵌入。結果可複製或下載為格式化的 .py 或壓縮的 .py,取決於所選模式。壓縮形式適合嵌入 shell 單行指令或簡短的 Email 簽名。
檢查 f-string 和三引號文件字串將巢狀 f-string、正則表達式範例和包含嵌入程式碼區塊的三引號文件字串送進格式化工具,驗證大括號和引號是否保持平衡。文件字串內部出現意外縮排通常表示原始碼更早處有未關閉的三引號。當格式化工具對一個看似正確的片段報告解析錯誤時,請仔細重新檢查原始內容。
比較 Black 88 行寬與 PEP 8 79 行寬以及 autopep8/yapf/black這裡的輸出使用可配置的行寬而非固定的專案風格;Black 偏好的 88 行寬目標會產生更緊湊的結果,而 PEP 8 預設的 79 行寬是 autopep8 和多數編輯器的預設值。Black 有主張且不可配置,yapf 類似 Google 風格且可調整,autopep8 只修復 PEP 8 違規而不重構程式碼。用這個瀏覽器內工具快速清理,然後在 CI 中執行 Black 或 Ruff 來保持專案與團隊標準化的風格一致。

技術原理

Python 是少數使用縮排而非大括號來定義程式碼區塊的主流語言之一。相同縮排的連續語句屬於同一個區塊;多一個或少一個空格,語義就會改變。這種設計讓程式碼的視覺結構與其邏輯一致,但要求格式化工具精確識別邏輯層級。 格式化工具首先使用 tokenize 模組或自訂詞法分析器掃描程式碼,將每行的前導空白視為縮排資訊。括號(圓括號、方括號、花括號)內的語句可以跨越多行,此時縮排由括號深度而非前導空白決定。字串字面值(三引號、單引號)內部的空白不能觸碰,否則會改變字串的值。 PEP 8 是 Python 的官方風格指南,規定了 4 空格縮排、79 字元最大行寬、運算符周圍的空格、import 分組和命名慣例。Black 是無設定格式化工具流派的代表:它強制使用雙引號字串、尾隨逗號和 88 字元行寬,規則嚴格且不可設定。yapf 更接近 Google 風格,且可配置。

  • 縮排語法:Python 使用前導空白判定程式碼區塊;相同縮排代表同一區塊,縮排變更切換作用域
  • PEP 8 規則:4 空格縮排、行寬 79 字元、運算符周圍加空格、類別名稱用 CapWords、函式名稱用 snake_case
  • 括號換行:括號(圓括號、方括號、花括號)內的語句可以換行,縮排由括號深度而非前導空白決定
  • 字串邊界:三引號字串和文件字串內部的空白不能修改,否則會破壞字面值內容
  • Black 風格:零設定、不可自訂、強制雙引號、尾隨逗號、每行 88 字元、整個專案風格一致
  • 型別註解:PEP 484 引入;格式化工具保留 `->` 回傳型別和參數 `: type` 註解周圍的正確間距

範例

格式化函式定義

輸入: def add(a,b):
  return a+b


def subtract(a,b):
  return a-b
輸出:
def add(a, b):
    return a + b


def subtract(a, b):
    return a - b

格式化串列推導式

輸入: result=[x*x for x in range(10) if x%2==0]
result2={k:v for k,v in items if v>0}
輸出:
result = [x * x for x in range(10) if x % 2 == 0]
result2 = {k: v for k, v in items if v > 0}

格式化類別定義

輸入: class User:
  def __init__(self,name,email):
   self.name=name
    self.email=email
  def __repr__(self):
    return f"User({self.name})"
輸出:
class User:
    def __init__(self, name, email):
        self.name = name
        self.email = email

    def __repr__(self):
        return f"User({self.name})"

常見問題

它使用哪一種 Python 風格?

多數版本預設遵循 PEP 8,通常透過 Black 套用:88 欄行寬、雙引號字串、無結尾分號。Black 是有立場的格式化工具——它砍掉大部分設定旋鈕,以保證整個專案風格一致。如果需要彈性,可以改用 autopep8 或 yapf。

縮排對格式化工具重要嗎?

重要——Python 的縮排定義了區塊結構。格式化工具會尊重既有的區塊邊界;若輸入混用 Tab 與空白或縮排層級錯誤,在開始格式化前就會解析失敗。

會幫我整理 import 順序嗎?

Black、autopep8 與 yapf 只處理空白。若要排序與分組 import,請使用 isort(或 ruff --fix)。有些頁面會把兩者結合使用;請查看設定以確認實際套用了哪些。

支援型別註解(type hints)嗎?

現代版本的解析器都支援。函式簽章、變數與類別屬性上的型別註解(PEP 526、484、612)都能正確格式化。極新的語法(例如 3.12+ 的 PEP 695 泛型語法)需要較新的解析器,舊版本可能會卡住。

我的程式碼會被上傳嗎?

不會。格式化是在你的瀏覽器中以 JavaScript 實作的 Python AST 執行。貼上的程式碼不會被傳送到任何地方。

結果會與我 CI 上跑的 black 一致嗎?

接近但不一定完全相同。不同版本的 Black 會有些微差異(Black 會定期更新規則)。若要 CI 一致,請在本機與 CI 上使用同一個 Black 版本;本頁適合當作快速的視覺檢查。

為什麼長行會被斷成多行?

PEP 8 與 Black 都以每行不超過 88 字元為目標。較長的運算式、引數很多的函式呼叫,以及鏈式方法呼叫,都會被拆到多行以提升可讀性。如果你的團隊使用 100 或 120,請調整行寬選項。