05-类型提示的缺点是什么
C.4 类型提示的缺点是什么
用类型提示有3个缺点:
- 带有类型提示的代码需要更长的编写时间;
- 某些情况下,类型提示无疑会降低代码的可读性;
- 类型提示机制尚未完全成熟,用目前的Python实现某些类型约束可能会令人困惑。
带有类型提示的代码需要更长的时间进行编写,原因有两个:只是多打了几个字(在键盘上多敲了几个键),就得对代码做更多的解释;多解释一下代码总是件好事情,但额外的解释会减缓程序运行速度。不过,通过在运行程序之前用类型检查工具发现错误来弥补失去的时间还是有希望的。为了调试可被类型检查工具捕获的错误而耗费的时间,可能会多于使用复杂代码库编码时解释类型的时间。
有些人觉得,带有类型提示的Python代码的可读性变低了。造成这种情况原因可能有两个:不熟悉和啰唆。对于第一个问题(即不熟悉),任何陌生语法的可读性都会不如熟悉的语法。类型提示确实会改变Python程序的外观,起初可能会让人感到陌生。这只能通过多读多看并多写带有类型提示的Python代码来缓解。对于第二个问题(即啰唆),这一点更为要紧一些。Python因语法简洁而闻名。通常同样的程序用Python编写明显要比其他语言简短。而具有类型提示的Python代码就没有那么短小了,人眼看起来就没那么快了,毕竟代码中多了很多东西。虽然阅读时间增加了,但换来的是第一遍阅读后对代码的理解能更充分一些。有了类型提示,你就能立即知晓所有应有的类型,这比必须查看代码来了解类型或必须阅读文档更具优势。
类型提示仍在不断变化当中。自从首次于Python 3.5引入以来,类型提示已有了明显的进步,但其不擅长的边界情况(edge case)仍然存在。第2章中就有这方面的例子。 Protocol 类型通常是类型系统中的重要组成部分,在Python标准库的 typing 模块中却尚未包含,因此第2章中必须包含第三方的 typing_extensions 模块。在将来的官方Python标准库中有计划纳入 Protocol ,但目前尚未包含的事实证明Python类型提示仍处于早期阶段。基于标准库的可用现状,在本书的编写过程中,我遇到过几次令人困惑的边界情况。因为Python不是必须要有类型提示,所以当前阶段在不适合使用类型提示的场合只管不用即可。使用一定程度的类型提示仍然可以获得一些好处。