Mypy 0.720 发布,默认使用新的语义分析器

栏目: 软件资讯 · 发布时间: 6年前

内容简介: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()

Mypy 0.720 发布,默认使用新的语义分析器Mypy 0.720 发布,默认使用新的语义分析器

最后,新的语义分析器比旧的语义分析器更严格。它会捕获其他类型错误和质量问题。有关传递类型检查的现有代码可能需要进行小调整。

新特性:警告 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()

Mypy 0.720 发布,默认使用新的语义分析器Mypy 0.720 发布,默认使用新的语义分析器

 

查看文档以了解更多关于此项新特性的信息。

除了上述的更新内容,还包括一些改进和 bug 修复,详情请查看发布主页

BTW:mypy 核心团队由其雇主 Dropbox 提供资金。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编码的奥秘

编码的奥秘

Charles Petzold / 伍卫国、王宣政、孙燕妮 / 机械工业出版社 / 2000-9-1 / 24.00

渴望交流是大多数人的天性。在本书中,“编码”通常指一种在人和机器之间进行信息转换的系统。换句话说、编码即是交流。有时我们将编码看得很神秘,其实大多数编码并非都是这样。大多数的编码都需要被很好地理解,因为它们是人类交流的基础。――《编码的奥秘》 手电筒、英国人入侵、黑色的猫和跷跷板与计算机有什么必然联系?本书向我们展示了使用语言的一些直观方法并创造新的方法来进行相互之间的交流。此书使我们明白了......一起来看看 《编码的奥秘》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具