DevToolPal
繁

Python 程式碼格式化

使用編譯成 WebAssembly 的 Ruff 格式化工具,把 Python 程式碼整理成 Black 風格。

本機處理,不會上傳

選項

縮排
引號

輸入

0 字元 · 0 B

輸出

0 字元 · 0 B

這個工具能做什麼

Python 格式化工具會把 Python 程式碼改寫成廣泛使用的 Black 風格:一致的縮排、運算子前後加空格、使用雙引號、頂層定義之間空兩行,並在適當的位置把過長的行換行。

它的底層執行的是 Ruff 的格式化工具。Ruff 是以 Rust 撰寫的高速 Python linter 與格式化工具,這裡把它編譯成 WebAssembly。Ruff 的輸出幾乎逐行和 Black 一致,所以在這裡格式化過的程式碼,不會再被專案的 pre-commit hook 重新格式化一次。

使用方式

  1. 貼上 Python 程式碼,或開啟 .py 檔案。
  2. 格式化後的程式碼會隨著輸入即時顯示在右側。
  3. 如果你的專案使用不同的風格,可以調整選項:
    • 縮排:4 個空格是 PEP 8 的規範,也是預設值;也可以選 2 個空格或 Tab。
    • 每行寬度:88 是 Black 的預設值,79 是 PEP 8 的上限,100 或 120 適合較寬的螢幕。
    • 引號:雙引號、單引號,或保持每個字串原本使用的引號。
    • 有尾隨逗號時保持展開:以逗號結尾的集合保持展開。
  4. 複製或下載結果。

當程式碼無法剖析時,錯誤訊息會指出剖析器停下來的位置,例如第 4 行的 Expected `,`, found `=` ,你可以直接跳到那一行。

範例

範例是一個寫得很隨意的小模組:多個 import 擠在同一行且沒有空格、一個冒號前多了空格的 dataclass、一個用兩個空格縮排的方法,以及一個寫成一行的 if 陳述式。格式化之後,每個區塊都改用四個空格縮排,if 的內容移到獨立的一行,運算子前後加上空格,單引號變成雙引號,類別和函式之間也加上空行。原本以尾隨逗號結尾的清單會展開成每行一個字典。

格式化工具不會做的事

格式化只會改變排版。它不會排序 import、移除未使用的變數,也不會重新命名任何東西;這些是 linter 的工作(ruff check --fix 可以處理)。註解和 docstring 都會保留,而且遇到無法剖析的程式碼時,格式化工具會拒絕修改,而不是用猜的。

小提示

  • 使用和專案 pyproject.toml 相同的每行寬度,讓結果和 CI 一致。
  • 在提問或程式碼審查中貼出程式片段前先格式化,會好讀很多。
  • 如果程式碼來自 notebook 或聊天訊息,混用了 Tab 和空格,格式化工具一步就能把它統一。

常見問題

› 輸出結果和 Black 一樣嗎?

Ruff 的格式化工具設計成可以直接取代 Black,在大型實際專案中,超過 99.9% 的程式碼行輸出都和 Black 相同。這裡的預設設定(4 個空格縮排、88 欄、雙引號)就是 Black 的預設值。

› 什麼是「magic trailing comma」(神奇尾隨逗號)?

如果清單、呼叫或定義以尾隨逗號結尾,Black 和 Ruff 會讓它保持展開、每項一行,即使放得進一行也一樣。關閉這個開關後,只要放得下,這類集合就會合併成一行。

› 支援哪些 Python 版本?

剖析器能理解現代 Python 3 語法,包括 match 陳述式、型別參數列表,以及內含巢狀引號的 f-string。像 `print "x"` 這樣的 Python 2 程式碼會被視為語法錯誤。

› 我的程式碼會被上傳嗎?

不會。Ruff WebAssembly 模組只需下載一次,格式化在你的瀏覽器中執行。