介绍几款 Python 类型检查工具
近日,微软在 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
公众号【Python猫】, 专注Python技术、数据科学和深度学习,力图创造一个有趣又有用的学习分享平台。本号连载优质的系列文章,有喵星哲学猫系列、Python进阶系列、好书推荐系列、优质英文推荐与翻译等等,欢迎关注哦。PS:后台回复“爱学习”,免费获得一份学习大礼包。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MSSQL-最佳实践-数据库备份加密
title: MSSQL-最佳实践-数据库备份加密 author: 风移 摘要 在SQL Server安全系列专题月报分享中,我们已经分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术、列加密技术带来的查询性能问题以及相应解决方案、行级别安全解决方案和SQL Server 2016 dynamic data masking实现隐私数据列打码技术这六篇文章,文章详情可以参见往期月报。本期月报我们分享使用证书做数据库备份加密的最佳实践。 问题引入 谈及数据库安全性问题,如何预防数据库备份文件泄漏,如何防止脱库安全风险,是一个非常重要的安全防范课题。这个课题的目的是万一用户数据库备份文件泄漏,也要保证用户数据的安全。在SQL Server中,20
- 下一篇
Windows Server 2016 配置指南 全系列
配置 和 Linux 平台不一样,往往我们使用 Windows Server 都会选择有 GUI 的图形化版本(高手用 Core 也不用看我半吊子的教程了),而且 Windows 又自身占了一部分内存(防火墙、杀软等等),所以我们选择 Windows 平台的话,配置一定不能低。 推荐最低配置: 1核心 2G,内存实在拮据就只能用 32bit 版本了。 软件 系统是 64bit,那么其他软件虽然也能安装 32bit 的版本,但是 64bit 无论稳定性还是性能都是最好的。 Windows 平台在宣传能稳定用于生产的 Stable 版本下,能使用最新的就用最新的,例如我是 Wordpress 博客,那么能用 PHP7 就用,MariaDB 能上就上最新的 10.1。 像 VC14 运行库相对旧的运行库,稳定性和性能都会提升。 PHP7 提供了完整的 64bit 支持。MaridaDB 10.1 在 SSD 的表现下会更出色等等。 排序 一、系统设置[[Windows Server 2016 配置指南 之 设置虚拟内存] ](https://yq.aliyun.com/articles/60...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS关闭SELinux安全模块
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- 设置Eclipse缩进为4个空格,增强代码规范
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路