核心要点

  • 知道 PEP 8 是官方风格指南

  • 能说出几条核心规则(缩进、命名、行宽)

  • 了解 black/ruff/flake8 等自动化工具

标准回答

PEP 8PEP 8 -- Style Guide)是 Python 社区公认的代码风格规范,非语法强制,但团队与开源项目普遍遵循。

核心规则

  • 缩进:4 空格,不用 Tab
  • 行宽:79 字符(black 默认 88)
  • 命名:函数/变量 snake_case,类 CapWords,常量 UPPER_CASE
  • 空行:类/函数间 2 行,方法间 1 行
  • 导入:标准库 → 第三方 → 本地,各组空行分隔

重要性

  • 降低代码审查摩擦
  • 新人快速融入代码库
  • 工具可自动检查/格式化

工具链black(格式化)、ruff/flake8(lint)、isort(导入排序)。CI 中集成可强制执行。

常见误区

⚠️ 常见踩坑

把 PEP 8 当成语法强制要求——它只是风格指南,违反不会报错,只是 linter 会警告。还有人机械套用「行宽 79」「与现有不一致也要改」,但 PEP 8 自己强调一致性优先、可适度破例(black 默认 88 字符就是务实之选)。把 PEP 8(风格)和 PEP 484(类型提示)混为一谈也是常见口误。

追问

追问 1PEP 和 RFC 有什么区别?

PEP(Python Enhancement Proposal)是 Python 官方提案流程,涵盖语言特性(PEP 484 类型提示)和流程/风格(PEP 8)。通过社区讨论和 BDFL/核心开发者决策采纳。

追问 2何时可以违反 PEP 8?

与现有代码风格一致(Consistency)、避免破坏可读性的极端换行、与 C 扩展接口对齐等。PEP 8 自身说:「A foolish consistency is the hobgoblin of little minds」——明智地破例。

追问 3black 和 autopep8 有何不同?

autopep8 只做「最小修改」让代码满足 PEP 8,保留你原有的换行风格;black 是「不妥协的格式化器」,会按自己一套规则整体重排(默认行宽 88),几乎无配置项。团队选 black 能彻底消除风格争论、diff 更稳定;想保守改动则用 autopep8。如今 ruff format 也提供与 black 兼容的格式化。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。