早在 2006 年的 PEP-3107,Python 就推出了函数注解的功能,最终落在 3.0 版本实现。而到了 3.5 版本,Python 继续引入了静态类型检查的语法(即 PEP-484,type hints)。2014 年的 PEP-483 更是以《The Theory of Type Hints》为题,做出了理论上的归纳。后来,又陆续提出了 PEP-526、PEP-544,类型检查的规范逐渐丰富。
类型检查的好处是及早检查,提前发现类型的错误,增强代码的一致性与可维护性。(还有防止脱发,喵)
如上例所示,增加检查后,可以在编译期就判断入参和返回值是否是字符串类型。
在微软推出 pyright 之前,主流的静态检查工具有三款:官方的mypy 、Google 出的pytype 、Facebook 出的pyre-check 。三足鼎立的局面要被打破了。
pyright 的文档宣称它有如下特点:
速度快。相较于 mypy 及其它用 Python 写的检查工具,它的速度是 5 倍甚至更多。
不依赖 Python 环境。它用 TypeScript 写成,运行于 node 上,不依赖 Python 环境或第三方包。
可配置性强。支持自由地配置,支持指定不同的运行环境(PYTHONPATH 设置、Python 版本、平台目标)。
检查项齐全。支持类型检查及其它语法项的检查(如 PEP-484、PEP-526、PEP-544),以及函数返回值、类变量、全局变量的检查,甚至可以检查条件循环语句
命令行工具。它包含两个 VS Code 插件:一个命令行工具和一个语言服务器协议(Language Server Protocol)
内置 Stubs 。使用的是 Typeshed 的副本。(注:使用静态的 pyi 文件,检查内置模块、标准库和三方件 )
语言服务特性。悬停提示信息、符号定义的跳转、实时的编辑反馈
就此而言,不可谓不强大。事实上,pyright 是“站在了巨人的肩膀上”,它的各项功能似乎都继承自其它几位前辈。
接着看官方的 mypy ,它由“Python 之父” Guido van Rossum 亲自参与开发,是最主流的选择,推出得早,用户基数大,文档与社区经验也最丰富。
在集成 IDE 方面,所有主流的编辑器都支持:PyCharm、Vim、Emacs、Sublime Text、VS Code、Atom……在业界经验上,Instagram 和 Dropbox 的项目从 py2 迁移到 py3 ,就是用的它来做保障。
接着看谷歌的 pytype ,据文档描述,它可以:
标记常见错误,如拼写错误、函数调用错误
加强自定义的类型注解
支持对 pyi 文件生成类型注解
查看文档,我发现它有个功能还挺人性化的,即“错误降噪 ”,对于那些不必修改的错误,可以添加注释,来消除类型检查。
此外,还有一个考虑也不错,为了写类型检查,模块中可能会额外引入其它的模块,对于后者,pytype 有办法隐藏它,只在做类型检查时才加载。
最后,要介绍的是脸书的 pyre-check,它是去年开源的,也曾收获一片好评(说不定正是因为它,微软才上马了 pyright 项目也说不定)。
收集整理了一份《2024年最新Python全套学习资料》免费送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!