介绍
Python 是一种动态类型语言。它在运行时而不是编译时确定数据类型。Python 类型的一些示例包括整数、浮点数、字符串和布尔值。动态类型语言与静态类型语言(如 C++、Java 和 Fortran)形成对比,后者在编译时执行类型检查。
动态类型语言(如 Python)的一个优点是程序员不需要为每个声明的变量指定类型。相反,Python 解释器在运行时推断并分配一个类型。与使用静态类型语言(如 Java)相比,这导致更简洁的代码可以更快地编写。
这种简洁的风格也有其缺点。因为解释器更努力地填充 Python 留下的隐含内容,所以 Python 程序可能需要更长的时间来执行。你也可能偶尔会遇到错误,因为 Python 错误地解释了变量的类型。代码完成工具也可以更好地工作,并且对于静态类型的语言功能更全面。
最近对 Python 的增强使静态类型成为一种选择。替代语法现在让程序员可以选择以静态类型的方式编写他们的 Python 代码。Mypy是一个用于帮助您使用类型注释编写或重写 Python 代码的工具。这个工具为你的 Python 程序带来了静态类型的好处。
什么是Mypy?
Mypy 是一个用于静态类型检查 Python 代码的工具。Python 的创始人 Guido van Rossum已经在 Mypy 上工作了几年。Mypy 对静态类型 Python 的验证可以使程序更加正确、可读、可重构和可测试。如果你想使用 Python,并且想要静态类型的优势,那么可以考虑使用 Mypy。存在Pyre 等 Mypy的替代品,但 Mypy 目前在 Python 社区中更受欢迎。
Note
静态类型语言以更难学习而著称。将现有 Python 代码转换为静态类型代码可能会令人生畏,因为可能需要更改许多代码行。本指南说明了如何调整现有 Python 项目以增量使用 Mypy 和静态类型。
如何安装和使用 Mypy
如何安装 Mypy
使用 Pip 和以下命令在您的系统上安装 Mypy:
python -m pip install mypy
Mypy 基本用法
成功安装 Mypy 后,将目录更改为包含现有 Python 源文件的目录,然后使用以下命令运行 Mypy:
mypy *.py
如果没有发现错误,您应该会看到类似的输出。
Success: no issues found in N source files
如果您没有立即可用的 Python 源文件,请为此示例创建一个。
cd /tmp
echo "print('Hello, world.')" > test1.py
使用以下命令运行 Mypy:
mypy *.py
返回以下输出:
Success: no issues found in 1 source file
默认配置不提供有关静态类型的任何有用信息。这是因为 Python 示例没有定义任何静态类型。
使用 Mypy 识别错误
print Mypy 可以帮助在开发生命周期的早期识别错误,例如语句中缺少括号。与 Python 2 相比,Python 3 严格要求print语句周围有括号。如果您正在努力将 Python 2 程序更新到 Python 3,Mypy 可以帮助您识别常见的语法错误,例如缺少括号。
创建一个示例 Python 文件并运行 Mypy 以查看其错误处理的实际效果。
echo "print 'Hello, world.'" > test2.py
mypy *.py
Mypy 返回以下错误:
error: Missing parentheses in call to 'print'. Did you mean print('Hello, world.')?
Found 1 error in 1 file (errors prevented further checking)
Mypy 可以print在初始运行时识别每个需要括号的语句。
使用类型注解的静态类型
Mypy 允许您向函数添加类型注释,以帮助它检测与不正确的函数返回类型相关的错误。考虑以下示例:
File: test3.py
def legal_name