文章目錄
- 一、Black自動格式化工具
- 二、格式化行為的核心內容
- 1. 統一縮進和空格規則
- 2. 括號換行:一致的多行結構展開
- 3. 字符串風格統一
- 4. 函數/類定義中的空行規則
- 5. import 排序(建議搭配 isort)
- 6. 注釋不動、換行優雅
- 7. 可配置項極少,強調“零配置”理念
- 三、安裝
- 四、使用方式
- (1)單文件 - 格式化:black example.py(修改原文件)
- (2)多文件 - 格式化:black .(修改原文件)
- (3)查看修改內容(支持單/多文件):black --diff(不修改原文件)
- (4)在VS Code中安裝插件實時使用(推薦)
在線文本對比
? 一、自動執行Python代碼規范的常用工具
工具名稱 | 功能類別 | 說明 |
---|---|---|
Black | 代碼格式化工具 | 自動格式化Python代碼,主張“無配置就是最好的配置”,風格一致性極強 |
isort | import排序 | 自動將import 語句分組排序(標準庫、第三方庫、本地模塊),保持整潔 |
flake8 | 代碼風格檢查 | 基于PEP8規范,檢查命名、空格、縮進、未使用變量、重復定義、復雜度等 |
pylint | 代碼質量評估 | 提供評分機制并報告冗余/危險代碼,適合用于靜態代碼分析和質量評估 |
mypy | 靜態類型檢查 | 對標PEP 484,檢查類型注解的正確性,適合大型項目構建類型安全 |
autopep8 | 自動PEP8修復 | 根據flake8 風格檢查自動修復,但不如Black 統一、現代 |
? 二、IDE集成建議(VSCode等)
若使用 VSCode、PyCharm 等IDE,可集成以下工具:
功能 | 推薦插件 | 設置位置 |
---|---|---|
自動格式化 | Black Formatter | settings.json 配置black 為默認格式化器 |
風格檢查 | flake8 | 可通過插件提示下劃線標出錯誤 |
import排序 | isort | 可結合保存時自動執行 |
一、Black自動格式化工具
Black 是 Python 社區廣泛使用的自動格式化工具,可以一鍵幫你格式化代碼,風格統一、無爭議,開發者只需專注業務邏輯,不再糾結代碼縮進、空格、換行風格等細節。
口號:The Uncompromising Code Formatter —— 不可協商的代碼風格(所以不用做風格選擇題)
二、格式化行為的核心內容
1. 統一縮進和空格規則
- 使用4個空格縮進
- 刪除不必要的空格(如
if(x == 1) → if (x == 1)
) ,
號后自動添加空格(除非在函數參數中省略)- 去除尾部空格
- 保證每個文件結尾 只有一個空行
2. 括號換行:一致的多行結構展開
在函數調用或定義參數較多、過長時,自動使用“垂直風格”展開括號內容:
# 原始寫法
def foo(a, b, c, d): pass# 格式化后
def foo(a,b,c,d,
):pass
這提升了 diff 穩定性,減少多人協作時“只改一行卻整組變了”的問題。
3. 字符串風格統一
- 默認使用 雙引號
" "
- 除非包含嵌套雙引號,才會用單引號
# 原始
s = 'Hello'# 格式化后
s = "Hello"
4. 函數/類定義中的空行規則
- 頂級函數或類定義之間留 2行
- 類中方法之間留 1行
5. import 排序(建議搭配 isort)
Black 本身只對 import 保持分組,但不負責排序順序:
# Black會這樣組織:
import os
import sysimport numpy as np
import torch
? 推薦 配合 isort 使用,處理完整排序邏輯。
6. 注釋不動、換行優雅
- Black 不會修改注釋內容
- 但會適當調整注釋的位置以匹配格式化后的結構
7. 可配置項極少,強調“零配置”理念
Black 有意只保留極少的選項,例如:
三、安裝
用pip直接安裝:pip install black
,需要 Python 3.9 及以上版本。
四、使用方式
(1)單文件 - 格式化:black example.py(修改原文件)
假設你有一個叫 example.py 的 Python 腳本,只需一行命令:black example.py
👉 它會直接修改原文件(不會備份)。
import cv2tif_path = r"D:\py\other\stig_x_0.007.tif" # 不可以有中文
img = cv2.imread(tif_path, cv2.IMREAD_UNCHANGED)
if img is None:raise SystemExit(f"無法讀取圖像 '{tif_path}'")# 顯示圖片
cv2. imshow("imgs", img)
cv2. waitKey(0)
cv2. destroyAllWindows()
執行black D:\py\other\test.py后的運行結果如下:
import cv2tif_path = r"D:\py\other\stig_x_0.007.tif" # 不可以有中文
img = cv2.imread(tif_path, cv2.IMREAD_UNCHANGED)
if img is None:raise SystemExit(f"無法讀取圖像 '{tif_path}'")# 顯示圖片
cv2.imshow("imgs", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
(2)多文件 - 格式化:black .(修改原文件)
你也可以一次性格式化整個項目文件夾:black .
其中 . 表示當前目錄,它會遞歸查找所有 .py 文件進行格式化。
(3)查看修改內容(支持單/多文件):black --diff(不修改原文件)
若希望一次檢查多個文件,避免誤改生產代碼,推薦結合 Git 使用:black . --check
import cv2tif_path = r"D:\py\other\stig_x_0.007.tif" # 不可以有中文
img = cv2.imread(tif_path, cv2.IMREAD_UNCHANGED)
if img is None:raise SystemExit(f"無法讀取圖像 '{tif_path}'")# 顯示圖片
cv2. imshow("imgs", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
執行black --diff D:\py\other\test.py
后的運行結果如下:
(py39) PS D:\py> black --diff D:\py\other\test.py
--- D:\py\other\test.py 2025-06-17 09:20:21.661186+00:00
+++ D:\py\other\test.py 2025-06-17 09:20:25.159215+00:00
@@ -1,11 +1,11 @@import cv2-tif_path = r"D:\py\other\stig_x_0.007.tif" # 不可以有中文
-img = cv2.imread(tif_path, cv2.IMREAD_UNCHANGED)
+tif_path = r"D:\py\other\stig_x_0.007.tif" # 不可以有中文
+img = cv2.imread(tif_path, cv2.IMREAD_UNCHANGED)if img is None:raise SystemExit(f"無法讀取圖像 '{tif_path}'")# 顯示圖片
-cv2. imshow("imgs", img)
-cv2. waitKey(0)
-cv2. destroyAllWindows()
\ No newline at end of file
+cv2.imshow("imgs", img)
+cv2.waitKey(0)
+cv2.destroyAllWindows()
would reformat D:\py\other\test.pyAll done! ? 🍰 ?
1 file would be reformatted.
(4)在VS Code中安裝插件實時使用(推薦)
打開VS Code設置中搜索Python Formatting Provider
,設為black
允許保存時自動格式化:
// settings.json 配置
"editor.formatOnSave": true,
"python.formatting.provider": "black"
這樣每次按Ctrl+S
保存時,Black
就會自動幫你格式化代碼。