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

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

内容简介: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 提供资金。


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

查看所有标签

猜你喜欢:

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

鸟哥的Linux私房菜 基础学习篇(第二版)

鸟哥的Linux私房菜 基础学习篇(第二版)

鸟哥 / 人民邮电出版社 / 2007-9 / 65.00元

《鸟哥的Linux私房菜基础学习篇(第二版)》全面而详细地介绍了Linux操作系统。全书分为5个部分:第一部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部分介绍Linux的文件系统、文件、目录与磁盘的管理;第三部分介绍文字模式接口shell和管理系统的好帮手shell脚本,另外还介绍了文字编辑器vi和vim的使用方法;第四部分介绍了对于系统安全非常重要的Linux账号的管理......一起来看看 《鸟哥的Linux私房菜 基础学习篇(第二版)》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器