Black自動格式化工具

文章目錄

  • 一、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代碼,主張“無配置就是最好的配置”,風格一致性極強
isortimport排序自動將import語句分組排序(標準庫、第三方庫、本地模塊),保持整潔
flake8代碼風格檢查基于PEP8規范,檢查命名、空格、縮進、未使用變量、重復定義、復雜度等
pylint代碼質量評估提供評分機制并報告冗余/危險代碼,適合用于靜態代碼分析和質量評估
mypy靜態類型檢查對標PEP 484,檢查類型注解的正確性,適合大型項目構建類型安全
autopep8自動PEP8修復根據flake8風格檢查自動修復,但不如Black統一、現代

? 二、IDE集成建議(VSCode等)
若使用 VSCode、PyCharm 等IDE,可集成以下工具:

功能推薦插件設置位置
自動格式化Black Formattersettings.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就會自動幫你格式化代碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83929.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83929.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83929.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

項目拓展-簡易SQL監控,P6SPY攔截所有jdbc連接并打印執行SQL

介紹一下P6spy驅動 p6spy 是一款開源的數據庫監控框架,主要用于 攔截和記錄應用程序與數據庫之間的所有交互(如 SQL 語句、參數、執行時間等) 它通過包裝現有的 JDBC 驅動(如 MySQL JDBC 驅動),在不修改業…

洛谷B3951 [GESP樣題 五級] 小楊的隊列

題目描述 小楊的班級里共有 N N N 名同學,學號從 0 0 0 至 N ? 1 N-1 N?1。某節課上,老師要求同學們進行列隊。具體來說,老師會依次點名 M M M 名同學,讓他們加入隊伍。每名新入隊的同學需要先站到隊伍末尾(剛開…

Java編程之外觀模式

前言 想象你要去一家很復雜的餐廳吃飯,但不想自己點菜、排隊、找位置,也不想管廚房、洗碗、送餐這些后端流程。你只需要告訴餐廳服務員“我要一份牛排套餐”,然后坐等就好。這個服務員,就是外觀模式(Facade Pattern&a…

告別 Java 開發困境!飛算 JavaAI 開發助手開啟智能編程新時代

在 Java 開發的世界里,需求不明確、加班寫重復代碼、被 BUG 搞得焦頭爛額,是許多開發者難以擺脫的 “三座大山”。需求文檔模糊不清,讓開發者在項目起始階段就陷入迷茫;大量重復性的代碼編寫工作,不僅消耗時間和精力&a…

Node.js 中兩種模塊導出方式區別

兩種模塊到處方式 exports.xxx ... module.exports ... 1. exports.xxx ... exports 是 module.exports 的一個引用(快捷方式)。 當你寫 exports.foo function() {},實際上就是給 module.exports 對象添加了一個 foo 屬性。 這種方式…

電腦出問題了,無網絡環境下一鍵快速重裝系統

在電腦使用過程中,系統故障、卡頓、崩潰等問題屢見不鮮。面對這些情況,重裝系統往往是解決問題的最有效手段之一。然而對于剛接觸計算機操作的新用戶來說,如何安全、穩定地完成系統重裝,仍是一個頗具挑戰的任務。 這一款專為新手…

基于區塊鏈的去中心化身份驗證系統:原理、實現與應用

前言 在數字化時代,身份驗證是網絡安全和隱私保護的核心環節。傳統的身份驗證系統依賴于中心化的機構,如政府、銀行或互聯網服務提供商,這些機構存儲和管理用戶的個人信息。然而,中心化系統存在諸多問題,如數據泄露風險…

React forwardRef 與 useImperativeHandle 深度解析

在React開發中,組件間的通信是一個核心話題。雖然props和state能夠處理大部分場景,但有時我們需要更直接的方式來操作子組件。今天我們來深入探討兩個強大的React Hook:forwardRef和useImperativeHandle。 forwardRef:傳遞引用的…

KingbaseES在線體驗平臺深度測評:基于MCP接口管理的Oracle風格SQL實戰

文章目錄 一、平臺環境與準備二、引導體驗1.檢查數據庫版本及服務狀態 三、建庫與建表1. 建庫(KingbaseES中通常無需顯式建庫,此處以創建schema模擬)2. 建表 四、查庫與數據操作測試1. 查庫(確認表結構)2. 新增數據3. …

echarts開發 | 數據可視化 -- 第三篇 echart進階配置項 數據集

文章目錄 一、概念二、回顧在系列(series)中設置數據三、在數據集中設置數據3.1 數據集(dataset) 基礎3.2 二維數組數據(默認) 四、把數據集(dataset) 的行或列 映射為 序列 (series)五、維度(dimension)六、數據到圖形的映射 (series.encode) 一、概念 …

如何科學測算AI業務場景所需算力服務器?——以Qwen3 32B模型與海光K100為例

在人工智能(AI)技術飛速發展的今天,越來越多企業開始部署大模型應用,如智能問答、文本生成、知識圖譜構建等。但如何合理配置硬件資源,既滿足業務需求又避免資源浪費,是每個項目實施前必須解決的問題。 本…

滲透實戰:利用XSS獲取cookie和密碼

操作均來自靶場,切勿用于未授權滲透測試! Lab 21:將反射型 XSS 注入帶有尖括號、單引號、雙引號、反斜杠和反引號的 Unicode 轉義模板文字中 輸入的任何單引號雙引號尖括號都會被 unicode 編碼 直接換另一種代碼執行方式${alert(1)}&#…

Eureka、Nacos、Zookeeper 優雅上下線機制

? 三大注冊中心優雅上下線機制對比 維度EurekaNacosZookeeper注冊方式客戶端注冊 心跳維持客戶端注冊 心跳維持客戶端創建臨時節點服務可用狀態控制STARTING、UP、DOWN、OUT_OF_SERVICEUP、DOWN、STARTING 等無顯式狀態標識,靠節點存在與否判定上線控制方式通過…

Flink與Kubernetes集成

引言 在當今大數據與云計算蓬勃發展的時代,容器編排與流處理技術成為企業數據處理架構的關鍵支柱。Kubernetes作為容器編排系統的行業標準,能夠高效自動化地部署、擴展和管理計算機應用程序;Apache Flink則是流處理和批處理領域的佼佼者&…

第五節:Vben Admin 最新 v5.0 (vben5) 快速入門 - 角色管理模塊(上)

Vben5 系列文章目錄 ?? 基礎篇 ? 第一節:Vben Admin 最新 v5.0 (vben5) 快速入門 ? 第二節:Vben Admin 最新 v5.0 (vben5) 快速入門 - Python Flask 后端開發詳解(附源碼) ? 第三節:Vben Admin 最新 v5.0 (vben5) 快速入門 - 對接后端登錄接口(上) ? 第四節:Vben Ad…

實施企業預算管理的企微CRM系統技巧:從成本控制到價值創造

一、企微CRM管理系統為何成為預算管理新引擎? 官方數據顯示,接入企微CRM系統的企業平均降低客戶管理成本28%,預算執行效率提升40%。這源于企微CRM管理軟件的三大獨特優勢: 原生集成能力:與企業微信通訊錄、會話存檔無縫對接&…

WebFuture:手機版頁面部分區域報錯:未將對象引用設置到對象的實例

問題描述: 手機版頁面部分區域報錯:未將對象引用設置到對象的實例,PC板訪問正常。 問題分析: 對比PC和手機頁面模板,調用代碼有以下差異,手機版模板沒兼容null值,簡介為空導致報錯。 解決方法…

【Cursor點擊登錄后一直轉圈,無反應】

Cursor點擊登錄后一直轉圈,無反應 一、問題描述二、解決方案 一、問題描述 1、進入Cursor官網(國際版): Cursor國際版地址 2、填入賬號密碼,點擊登錄 3、一直轉圈,無法登錄 二、解決方案 使用梯子&…

【無標題】世界模型

為什么大語言模型,沒有真正推動經濟大幅增長,但世界模型有可能 5月份谷歌IO大會,DeepMind老板(谷歌AI業務負責人,2024Nobel化學獎得主,黛密斯哈薩比斯)提到,谷歌接下來目標是做世界…

Doc2X:?精度、?性價??檔解析 API,助力Arxiv論文智能解讀Agent構建

前言 在AI大模型時代,RAG(Retrieval-Augmented Generation)檢索增強生成技術已經成為構建智能知識庫和問答系統的核心架構。然而,在實際項目實施過程中,開發者們往往會遇到一個關鍵痛點:如何高質量地將各種…