近日,微软在 Github 上开源了一个 Python 静态范例搜检东西:pyright
,引起了社区内的多方关注。
微软在开源项目上的介入力度是越来越大了,不说收买 Github 这类大的计谋野心,只说它家开源的 VS Code 编辑器,在猿界已割粉无数,连我们 Python 圈的红人 Kenneth Reitz (多个开源项目的作者,包括 requests、requests-html、responder等)都对它拍案叫绝。
现在开源的 Pyright ,口碑还不错,那我们就来看看它有啥本领,趁便再引见别的几款范例搜检东西。
尽人皆知,Python 是一门动态范例言语,在运转期才晓得变量的现实范例。这本就是动态言语的特征,然而在团队协作或大型项目上,保护的价值也不可防止,俗话说的是:“动态一时爽,重构火葬场 ”。
早在 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,范例搜检的范例逐步雄厚。
范例搜检的优点是尽早搜检,提早发明范例的毛病,增强代码的一致性与可保护性。(另有防备脱发,喵)
# 不加搜检 def greeting(name): return 'Hello ' + name # 增添搜检 def greeting(name: str) -> str: return 'Hello ' + name
如上例所示,增添搜检后,能够在编译期就推断入参和返回值是不是是字符串范例。
在微软推出 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 项目也说不定)。
基础的功用点迥然差别,不过它也是有亮点的。pyre-check 可集成Watchman 模块,该“观察者”会监听代码文件,跟踪所做的修正。微软的 pyright 有个 watch 形式,应该是吸收了这点,而且越发好用(由于不须要分外装置 Watchman 和别的依靠)。
pyre-check 另有个亮点,它有个query 参数,能够对源码做部分区域性的搜检,比方查询某行中一个表达式的范例、查询一个类的悉数要领并返回成列表,等等,如许能够防止做周全的搜检。
4 种范例搜检东西引见终了,下面是一份提要对照:
至于它们的机能怎样,是不是真如 pyright 所说,它的速率是别的几个的 5 倍呢?感兴趣的同学们能够去尝尝。有什么运用体味,迎接留言与我交换。
项目地点:
https://github.com/python/mypy、https://github.com/Microsoft/pyright、https://github.com/google/pytype、https://github.com/facebook/pyre-check
本篇文章到这里就已悉数完毕了,更多其他精彩内容能够关注ki4网的python视频教程栏目!
以上就是几款Python范例搜检东西的分享的细致内容,更多请关注ki4网别的相干文章!