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 单行命令或简短的邮件签名中。
审查 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 字符、运算符两侧加空格、分组导入和命名约定。Black 是无配置格式化器的代表:强制双引号字符串、尾部逗号和 88 字符行宽,规则严格且不可配置。yapf 更接近 Google 风格,支持自定义配置。
  • 缩进语义:Python 使用前导空白判断代码块;相同缩进表示同一代码块,缩进变化切换作用域
  • PEP 8 规则:4 空格缩进、行宽 79 字符、运算符两侧加空格、类名用 CapWords、函数名用 snake_case
  • 括号换行:括号(圆括号、方括号、花括号)内的语句可换行,缩进由括号深度而非前导空白决定
  • 字符串边界:三引号字符串和文档字符串内的空白不能修改,否则会破坏字面量内容
  • Black 风格:零配置、不可定制、强制双引号、尾部逗号、每行 88 字符,整个项目统一风格
  • 类型注解:PEP 484 引入;格式化器保留 -> 返回类型和参数 : 类型注解周围的适当间距

示例

格式化函数定义

输入: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)。有些页面会把两者结合使用;请查看配置以确认实际应用了什么。

支持类型提示吗?

现代解析器支持。函数签名、变量和类属性上的类型注解(PEP 526、484、612)都能正确格式化。非常新的语法(如 3.12+ 的 PEP 695 泛型语法)需要较新的解析器;旧版本可能会出错。

我的代码会被上传吗?

不会。格式化在浏览器中通过 Python AST 的 JavaScript 实现运行。粘贴的代码不会被传输。

结果会和 CI 上的 Black 一致吗?

接近但未必完全一致。不同 Black 版本的格式化结果可能略有差异(Black 会定期更新规则)。要保证 CI 一致,请在本地和 CI 中使用相同的 Black 版本;本页面更适合作为快速的视觉检查。

为什么会把长行折叠成多行?

PEP 8 和 Black 的目标是每行不超过 88 字符。长表达式、参数较多的函数调用以及链式方法调用会被拆成多行以提升可读性。如果你的团队使用 100 或 120 列,请调整行宽选项。