04-为什么类型提示很有用
C.3 为什么类型提示很有用
既然知道了类型提示是什么,大家可能就想知道造成这么多麻烦为什么值得。毕竟,大家也都知道了Python在运行时会忽略类型提示。如果Python解释器都不在意,为什么还要耗费这么多时间在代码中添加类型提示呢?正如以上所述,类型提示是一件好事情,主要原因有两个:能让代码自文档化(self-documenting);允许类型检查工具在程序运行之前对程序的正确性进行验证。
在大多数具备静态类型的编程语言(如Java或Haskell)中,必备的类型声明语句能够清晰表达出函数(或方法)应有的参数及应该返回的类型。这为程序员减轻了一些编写文档的负担。例如,以下Java方法应有的参数或返回类型完全没有必要加以说明:
/* Eats the world, returning the amount of money generated as refuse. */
public float eatWorld(World w, Software s) { … }
与需要编写文档的Python等效方法比较一下,这里是指不带类型提示的传统写法:
# Eat the world
# Parameters:
# w – the World to eat
# s – the Software to eat the World with
# Returns:
# The amount of money generated by eating the world as a float def eat_world(w, s):
通过提供代码自文档化的能力,类型提示使得Python代码文档的简洁程度能够媲美静态类型语言:
# Eat the world, returning the amount of money generated as refuse.
def eat_world(w: World, s: Software) -> float:
考虑一个极端情况。假设我们继承了一个不带任何注释的代码库。带或不带类型提示,采用哪种更容易理解这个没有注释的代码库呢?有了类型提示,就不必深入研究无注释函数的实际代码,从而能了解传入参数的类型及函数应返回的类型。
请记住,类型提示本质上是一种说明方式,它标注出程序在某个时刻应有的类型。然而,Python对这种期许不会做任何验证,而这正是类型检查工具的用武之地。类型检查工具可以读取带有类型提示的Python源代码文件,并验证类型提示在程序运行时是否真的有效。
Python的类型提示有多种不同的类型检查工具。例如,PyCharm是一种流行的Python IDE,其内置了一个类型检查工具。如果在PyCharm中编辑带有类型提示的程序,它就会自动标出类型错误。这将有助于在函数编写完成之前就能发现错误。
在撰写本书时,mypy是首屈一指的Python类型检查工具。mypy项目的带头人是Guido van Rossum,他同时也是Python本身的创造者。由此,未来Python中类型提示将扮演突出的角色,对于这一点你还有疑问吗?mypy安装完毕后,运行它很简单,即 mypy example.py ,其中 example.py 是待类型检查的文件名。mypy会在控制台上显示程序中的所有类型错误,没有错误就什么都不显示。
将来类型提示可能还会有其他用途。目前类型提示不会影响Python程序的运行性能。最后再重申一次,在运行时类型提示会被忽略。但未来的Python版本可能会利用类型提示中的类型信息执行程序优化。那时你或许只需添加类型提示,就能加速Python程序的运行了。当然,这纯粹只是猜测。据我所知,Python目前并没有基于类型提示实现优化的计划。