内容简介:mypy 是处于实验性阶段的 Python 静态类型检查器,旨在结合动态类型和静态类型的优点,将 Python 的表现力和便利性与强大的类型系统和编译时(compile-time)类型检查相结合,提供编译时的类型检查和高效地编译为...
mypy 是处于实验性阶段的 Python 静态类型检查器,旨在结合动态类型和静态类型的优点,将 Python 的表现力和便利性与强大的类型系统和编译时(compile-time)类型检查相结合,提供编译时的类型检查和高效地编译为原生代码,无需使用重量级和耗费 runtime 开销的 Python 虚拟机。
mypy 仍处于开发阶段,支持大多数 Python 特性。
最新版本 0.720 已发布,更新内容主要是默认使用了新的语义分析器,以及针对语义分析器的许多改进。
默认使用新的语义分析器(Semantic Analyzer)
新的语义分析器在 mypy 0.710 版本被引入,现在成为默认选择。当然旧的语义分析器并没被移除,只需加上 --no-new-semantic-analyzer 参数即可使用。不过团队表示会在下一个版本中移除旧的语义分析器。
语义分析器是 mypy 的一个组件,用于将名称绑定到定义。它还会追踪每个名称定义的内容,例如函数或类型别名。新的语义分析器包含重大的重新设计,可以实现多种功能。
旧的语义分析器通常以线性顺序的方式处理文件,从开始到结束都是如此。这在 mypy 守护进程中略有不同,mypy 守护进程有时会将单个函数或模块顶层(代码未嵌套在函数中)作为单个单元进行处理。新的语义分析器通过在分析函数之前分别分析模块顶层来统一 mypy 行为。这样的好处是,可更密切地反映 Python runtime 的行为,因为模块通常在调用任何函数之前完全初始化。
旧的语义分析器按照复杂的启发法,以确定的顺序对导入周期中的每个模块进行两次处理。当存在尚未在依赖循环中处理的另一个模块的引用时,这可能导致出现虚报的错误。而新的分析器会以灵活的顺序处理模块,并且导入周期中的引用工作更加可靠。
另外,旧的语义分析器不能频繁处理定义的向前引用(forward references)。新的语义分析器改进了对向前引用的支持。例子:
from typing import NamedTuple
f = lambda: A(1) # This forward reference now works
A = NamedTuple('A', [('x', int)])
f()
最后,新的语义分析器比旧的语义分析器更严格。它会捕获其他类型错误和质量问题。有关传递类型检查的现有代码可能需要进行小调整。
新特性:警告 Unreachable 代码
当加上 --warn-unreachable 参数运行 mypy 时,mypy 会对 unreachable 的语句进行警告,以及由于进行 short circuiting 操作而永远无法评估的表达式。如:
from typing import Text
def emphasize(text: Text) -> Text:
if isinstance(text, int):
text += 1 # Error: statement is unreachable
return text.upper()
查看文档以了解更多关于此项新特性的信息。
除了上述的更新内容,还包括一些改进和 bug 修复,详情请查看发布主页。
BTW:mypy 核心团队由其雇主 Dropbox 提供资金。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 手写一个词法分析器
- React 性能分析器介绍
- Elasticsearch(八)【NEST高级客户端--分析器】
- Elasticsearch(八)【NEST高级客户端--分析器】
- Linux 下网络协议分析器 Wireshark 使用基础
- c++ CMake添加目标调用clang分析器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
鸟哥的Linux私房菜 基础学习篇(第二版)
鸟哥 / 人民邮电出版社 / 2007-9 / 65.00元
《鸟哥的Linux私房菜基础学习篇(第二版)》全面而详细地介绍了Linux操作系统。全书分为5个部分:第一部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部分介绍Linux的文件系统、文件、目录与磁盘的管理;第三部分介绍文字模式接口shell和管理系统的好帮手shell脚本,另外还介绍了文字编辑器vi和vim的使用方法;第四部分介绍了对于系统安全非常重要的Linux账号的管理......一起来看看 《鸟哥的Linux私房菜 基础学习篇(第二版)》 这本书的介绍吧!