Python 最近在静态类型方面有了很大的发展。从 Python 3.5 开始,类型提示是一回事。这就是PEP 0484 的全部意义所在。类型提示语法完全基于之前在PEP 3107 中引入的函数注释语法。这使得 PEP 0484 成为一个不涉及新语法的更改,这使得它非常有吸引力且易于适应。
那么,它是如何工作的?对于简单的情况,语法实际上非常直观。例如:
def greeting(name: str) -> str:
return 'Hello ' + name
类型提示系统也支持非常复杂的东西。您还可以使用用户类型、可调用对象、使用联合的多个重载,甚至是泛型类型。您可以在 PEP 本身中看到很多示例。
你也可以看Guido van Rossum’s talk关于上一届 PyCon 的类型提示,真的很有趣,涵盖了很多细节。
最后,有了所有这些类型提示,我们如何处理它们?好吧,这个很棒的库已经存在了一段时间,早在 Python 3.5 和 PEP 0484 之前。实际上,现在正式引入的类型提示语法是基于该库的,但只是形式化了。该库名为mypy,基本上是 Python 的静态类型检查器。安装后,您可以使用 mypy 可执行文件对任何包含类型注释的 Python 脚本进行类型检查。
例如,让我们将上面的函数定义放在一个文件中,并使用错误的类型参数调用它:
greeting(123)
在文件上运行 mypy,得到以下输出:
$ mypy test.py
test.py:4: error: Argument 1 to "greeting" has incompatible type "int"; expected "str"
mypy 虽然在技术上是实验性的,但它是一个非常强大且运行良好的工具。如果你喜欢这个东西并且会采用类型注释,那么你真的应该去看看。