前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >失控的 Python3 类型

失控的 Python3 类型

作者头像
章鱼猫先生
发布2022-09-02 13:33:33
3470
发布2022-09-02 13:33:33
举报
文章被收录于专栏:BioIT爱好者BioIT爱好者

作者 | James Somers 编译 | 史提芬先森 原文 | Python 3 Types in the Wild

Python 曾经是一种你可以在几天内学会的语言,但“曾经是”是很多年前的事了。最近,我相隔11年后重新用这门语言开发产品时,有点不知所措,它添加了太多的新功能,如果你不了解所有这些新功能,理解现代 Python 代码将是多么困难的一件事。

最大的变化之一是添加了类型注释,它允许开发人员通过一个函数返回 Dict[List[Set[FrozenSet[int]]], str](即,一个映射一组整数的不可变集合列表到字符串的字典)。[RakAmnouykit2020] 对程序员如何使用这些注释进行了实证研究,并得出了一些令人惊讶的结果。一方面,最常见的类型注释是用户定义的类型。

更有趣的是,当作者从文件中剥离注释并要求 PyType 推断它们时,在 77% 的情况下它未能这样做,这意味着用户编写的注释正在捕获自动工具无法捕获的信息。另一方面,MyPy 发现在检查的 2,678 个存储库中,只有 15% 是类型正确的;这可能是因为 MyPy 非常保守并产生误报。更令人不安的是这些不同工具之间的分歧,但像这样的研究正是我们需要使这些工具更加一致和更有帮助的。

[RakAmnouykit2020] Ingkarat Rak-amnouykit, Daniel McCrevan, Ana Milanova, Martin Hirzel, and Julian Dolby: Python 3 types in the wild: a tale of two type systems. In Proc. ISDL 2020, doi:10.1145/3426422.3426981.

Python 3 是一种高度动态的语言,但它引入了一种用 PEP484 表达类型的语法。本文探讨了开发人员如何使用这些类型注释、类型检查和推理工具提供的类型系统语义以及这些工具的性能。我们评估公共 GitHub 存储库语料库中的类型和工具。我们回顾了 MyPy 和 PyType 这两个规范的静态类型检查和推理工具,以及它们不同的类型分析方法。然后我们解决三个研究问题:

  1. 开发人员使用 Python 3 类型的频率和方式是什么?
  2. 开发人员会犯哪些类型的错误?
  3. 来自不同工具的类型错误如何比较?

令人惊讶的是,当开发人员使用静态类型时,代码很少使用任何一种工具进行类型检查。MyPy 和 PyType 由于它们的静态性质而表现出误报,但也会在我们的语料库中标记出许多有用的错误。最后,MyPy 和 PyType 体现了两个不同的类型系统,在许多情况下标记不同的错误。了解 Python 类型的使用有助于指导工具构建者和研究人员。了解流行工具的性能有助于增加从业者对静态类型和工具的采用,最终导致更正确和更健壮的 Python 代码。

—END—

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BioIT爱好者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档