Mypy:Python的静态类型检查
有问题吗?
我们随时乐意回答问题!以下是一些适合提问的好地方:
如果你认为发现了一个bug:
要报告bug或请求增强功能:
- 在我们的问题追踪器上报告
- 如果问题与特定库或函数有关,可以考虑在typeshed追踪器或该库的问题追踪器上报告
要讨论新的类型系统功能:
- 在discuss.python.org上讨论
- 历史讨论还可以在typing-sig邮件列表和python/typing仓库中找到
什么是mypy?
Mypy是Python的静态类型检查器。
类型检查器有助于确保你在代码中正确使用变量和函数。使用mypy,你可以在Python程序中添加类型提示(PEP 484),mypy会在你不正确使用这些类型时警告你。
Python是一种动态语言,所以通常只有在尝试运行代码时才能看到错误。Mypy是一个静态检查器,所以它无需运行程序就能发现其中的bug!
这里有一个小例子来激发你的兴趣:
number = input("你最喜欢的数字是什么?")
print("它是", number + 1) # 错误:不支持的操作数类型:"str"和"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
# 或者如果你没有安装'git'
python3 -m pip install -U https://github.com/python/mypy/zipball/master
现在你可以这样对程序的静态类型部分进行类型检查:
mypy PROGRAM
即使mypy报告类型错误,你也可以始终使用Python解释器运行静态类型的程序:
python3 PROGRAM
你还可以在在线平台(由Yusuke Miyazaki开发)上尝试mypy。如果你正在处理大型代码库,可以在守护进程模式下运行mypy,这将提供更快(通常不到一秒)的增量更新:
dmypy run -- PROGRAM
集成
Mypy可以集成到流行的IDE中:
- Vim:
- Emacs: 使用Flycheck
- Sublime Text: SublimeLinter-contrib-mypy
- Atom: linter-mypy
- PyCharm: mypy插件(PyCharm集成了 自己的实现的PEP 484)
- VS Code: 提供基本集成的mypy。
- pre-commit: 使用pre-commit mirrors-mypy。
网站和文档
更多信息可在网站获取:
直接跳转到文档:
关注我们的更新日志:
https://mypy-lang.blogspot.com/
贡献
在测试、开发、文档和其他任务方面的帮助对项目非常有价值和有用。有适合各种经验水平的贡献者的任务。
要开始mypy的开发,请参阅CONTRIBUTING.md。
如果你需要帮助入门,不要犹豫,在gitter上提问。 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