当前位置: 首页 > news >正文

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://autoanalyzer.hdqtgc.cn
http://bench.hdqtgc.cn
http://bagworm.hdqtgc.cn
http://ade.hdqtgc.cn
http://biannual.hdqtgc.cn
http://adagiettos.hdqtgc.cn
http://burghley.hdqtgc.cn
http://anthocyanin.hdqtgc.cn
http://admensuration.hdqtgc.cn
http://bacteriolysis.hdqtgc.cn
http://aih.hdqtgc.cn
http://ainu.hdqtgc.cn
http://chloroplatinic.hdqtgc.cn
http://bogey.hdqtgc.cn
http://automatograph.hdqtgc.cn
http://buhrstone.hdqtgc.cn
http://chickenlivered.hdqtgc.cn
http://blastocoel.hdqtgc.cn
http://basketry.hdqtgc.cn
http://cecile.hdqtgc.cn
http://acock.hdqtgc.cn
http://aeolian.hdqtgc.cn
http://barytes.hdqtgc.cn
http://castrum.hdqtgc.cn
http://bucharest.hdqtgc.cn
http://bennery.hdqtgc.cn
http://azus.hdqtgc.cn
http://antifreeze.hdqtgc.cn
http://barytic.hdqtgc.cn
http://calendulin.hdqtgc.cn
http://www.dtcms.com/a/253125.html

相关文章:

  • 如何数据的永久保存?将信息以加密电磁波形式发射至太空实现永久保存的可行性说明
  • 04.【C语言学习笔记】数组
  • C++ 封装特性
  • Python 爬虫入门 Day 6 - 反爬虫应对策略 Headers / Cookies 模拟请求
  • Python词频统计工具全解析
  • FPGA基础 -- Verilog 表达式
  • 麒麟系统安装达梦数据库
  • 【git】git的基础使用一
  • C++---类和对象(中)
  • JSON与XML怎么选?什么情况下会用到 JSON?
  • 408第二季 - 组成原理 - 标志器和加法器
  • ES磁盘使用超限问题:TOO_MANY_REQUESTS disk usage exceeded flood-stage watermark,
  • 【Docker安装PostgreSQL】psql:致命错误: 用户 Password 认证失败
  • Android中Glide.with().load().into() 应付面试源码解析
  • C语言中errno错误码定义及使用
  • 绿色建筑发展新动能:楼宇自控助力实现高效节能减排
  • 2025年- H82-Lc190--322.零钱兑换(动态规划)--Java版
  • 【系统设计【4】】设计一个限流器:从理论到实践的完整解决方案
  • 【FreeRTOS实战】一章速通freertos含扩展MQTT,SD卡,
  • Java + Spring Boot + MyBatis 枚举变量传递给XML映射文件做判断
  • 6.17 note
  • 【AI News | 20250617】每日AI进展
  • JDBC强化关键_009_连接池
  • react 状态改变引发视图频繁更新,怎么优化
  • k均值聚类+成分分析降维+自编码器降维
  • Spring三层架构
  • VS和VS Code 对比和区别
  • Springboot整合ollama运行本地AI大模型
  • 利用Enigma Virtual Box将QT生成的软件打包成一个exe可执行文件
  • C++ map代码练习 1、2、priority_queue基础概念、对象创建、数据插入、获取堆顶、出队操作、大小操作,自定义结构、代码练习 1 2