Mypy:Python 的静态类型检查
有问题吗?
我们很乐意回答问题!以下是一些提问的好地方:
如果你刚开始入门, 文档 和 类型提示速查表 也可以帮助解答问题。
如果你认为发现了一个 bug:
要报告 bug 或请求增强功能:
- 在 我们的 issue 跟踪器 上报告
- 如果问题与特定的库或函数有关,请考虑在 typeshed 跟踪器 或该库的 issue 跟踪器上报告
要讨论新的类型系统功能:
- 在 discuss.python.org 上讨论
- 在 typing-sig 邮件列表 和 python/typing 仓库 上也有一些历史讨论
什么是 mypy?
Mypy 是 Python 的静态类型检查器。
类型检查器有助于确保你在代码中正确使用变量和函数。使用 mypy, 在你的 Python 程序中添加类型提示(PEP 484), mypy 会在你错误使用这些类型时发出警告。
Python 是一种动态语言,因此通常只有在你尝试运行代码时 才会看到错误。Mypy 是一个静态检查器,因此它可以在不运行你的程序的情况下 发现 bug!
下面是一个小例子,以引起你的兴趣:
number = input("What is your favourite number?")
print("It is", number + 1) # error: Unsupported operand types for + ("str" and "int")
为 mypy 添加类型注解不会干扰程序原本的运行方式。可以将类型注解视为类似于注释!即使 mypy 报告了错误,你始终可以使用 Python 解释器来运行你的代码。
Mypy 的设计考虑了渐进式类型检查。这意味着你可以缓慢地为代码库添加类型注解,并且在静态类型检查不方便时,始终可以回退到动态类型检查。
Mypy 拥有强大且易于使用的类型系统,支持类型推断、泛型、可调用类型、元组类型、联合类型、结构化子类型等功能。使用 mypy 将使你的程序更易于理解、调试和维护。
请参阅文档]以获取更多示例和信息。
特别是,请参阅:
快速入门
可以使用 pip 安装 Mypy:
python3 -m pip install -U mypy
如果你想运行最新版本的代码,你可以直接从 仓库安装:
python3 -m pip install -U git+https://github.com/python/mypy.git
现在你可以像这样对程序的[静态类型部分]进行类型检查:
mypy PROGRAM
你始终可以使用 Python 解释器来运行你的静态类型 程序,即使 mypy 报告了类型错误:
python3 PROGRAM
如果你正在处理大型代码库,你可以运行 mypy 的 daemon mode,这将提供快得多的(通常不到一秒)增量更新:
dmypy run -- PROGRAM
你也可以在在线游乐场(由 Yusuke Miyazaki 开发)中尝试 mypy。
集成
Mypy 可以集成到流行的 IDE 中:
- VS Code:提供与 mypy 的基本集成。
- Vim:
- Emacs:使用 Flycheck
- Sublime Text:SublimeLinter-contrib-mypy
- PyCharm:mypy 插件
- IDLE:idlemypyextension
- pre-commit:使用 pre-commit mirrors-mypy,但请注意 默认情况下这会限制 mypy 分析第三方依赖项的能力。
网站和文档
更多信息可在网站上获取:
直接跳转到文档:
请跟随我们的更新日志:
https://mypy-lang.blogspot.com/
贡献
在测试、开发、文档及其他任务方面的帮助 对项目的推进非常宝贵且有用。我们为 所有经验水平的贡献者都准备了任务。
若要开始开发 mypy,请参阅 CONTRIBUTING.md。
Mypyc 与 mypy 的编译版本
Mypyc 使用 Python 类型提示将 Python 模块编译为更快的 C 扩展。Mypy 本身使用 mypyc 进行编译:这使得 mypy 比解释执行快大约 4 倍!
若要安装解释执行版本的 mypy,请使用:
python3 -m pip install --no-binary mypy -U mypy
要使用 mypy 开发版本的编译版本,请直接安装来自 https://github.com/mypyc/mypy_mypyc-wheels/releases/latest 的二进制文件。
要为 mypyc 项目做出贡献,请查看位于 https://github.com/mypyc/mypyc 的问题跟踪器