Python 静态检查与 Ruff

用 Ruff 做高速 lint/format,并结合类型检查器形成静态质量门禁。

#type / concept #status / growing #tech / dev #resource / python #tech / lang / python

[!info] 关联笔记

Python 静态检查与 Ruff

这个概念为什么出现

风格争议与低级缺陷(未使用导入、危险默认、简化比较)不应靠人工 review 反复抓。Ruff 以 Rust 实现提供极快 lint/format;类型检查器补接口契约。

[!abstract] 一句话理解 Ruff 统一 lint/format 规则并快速反馈;与 pyright/mypy 分工:风格与缺陷 vs 类型契约。

最小可运行示例

先把示例放进业务场景,再看代码:

场景:演示“未使用变量”类问题为何该自动抓

# lint_smell_demo.py
# 业务意图:展示可被 lint 抓住的坏味道(教学文件)。
# 教学点:静态工具在 CI 挡低级问题。

def handle(order_id: str) -> str:
    unused = 1  # Ruff/F841 会抱怨
    return f"ok:{order_id}"


if __name__ == "__main__":
    print(handle("O1"))

建议运行:

python lint_smell_demo.py
# ruff check lint_smell_demo.py   # 若已安装 ruff

期望输出:

ok:O1

结合场景再看三个关注点

  1. 能跑 ≠ 干净
  2. lint 规则要团队配置,避免噪声。
  3. format 结束风格战争。

核心概念与准确模型

  • ruff check / ruff format
  • pyproject 配置规则
  • pre-commit / CI 门禁
  • 类型检查单独通道

边界情况与反直觉行为

  1. 自动 fix 需 review。
  2. 生成代码 可 per-file ignore。
  3. 与 black/isort 历史迁移。

常见误区

[!warning] 常见误区:lint 替代测试与设计 错误理解:全绿即正确。
正确模型:静态层只是多层质量之一。

工程实践

  • 新项目默认 Ruff
  • 与编辑器保存联动
  • 规则变更要有变更说明

本节总结

高速静态反馈让人类 review 聚焦设计。Ruff + 类型检查是现代默认组合。

自测题

  1. Ruff 与类型检查器分工?
  2. 为何要 CI 跑而不是只靠本地?
参考答案
  1. Ruff 偏风格/代码异味;类型检查偏接口契约。
  2. 保证未装钩子的提交也被门禁挡住。

延伸阅读与资料来源

资料类型支撑内容
Ruff文档工具
pyright文档类型检查
创建于 2026/7/15 更新于 2026/7/15