python - Python 中的静态类型检查工具

标签 python static-typing

我正在使用现有的大型 Python 代码库,并希望开始添加类型注释,以便进行某种程度的静态检查。我想像 Erlang , Strongtalk , 或 Typed Scheme/Racket .

我见过快速而肮脏的装饰器,它们根据函数参数和返回类型注释插入动态检查,但我正在寻找更健壮并在编译时执行检查的东西。

目前有哪些工具可用于此类事情?我熟悉编译器和类型检查,如果有良好的基础,我肯定愿意改进一个不完整的工具。

(注意:我对讨论静态类型的优缺点不感兴趣。)

编辑:一个例子:

def put(d, k, v):
   d[k] = v

我希望能够注释 put具有类型 put<K,V>(dict<K,V>, K, V) -> None 的功能.

更新:新的 PEP 484 (2014 年 9 月)在 Python 3.5+ 中定义了静态类型和类型注释的标准。有一个名为 mypy 的类型检查工具与 PEP 484 兼容。

最佳答案

编辑 2016-11-11: 只需使用 mypy .可以逐渐添加类型提示。在 Python 3 源代码中,它验证标准 PEP 484类型提示。类型仍然可以在 Python 2 中使用特殊注释来表示。 Guido likes it .

这篇文章最初是很久以前在 mypy 出现之前写的。我在下面保留了帖子的原始内容,尽管它不是很准确。


原帖:

您可能想查看此 related StackOverflow post on static analysis for Python 中提到的一些项目.

总结:

由于 Python 使用 duck typing广泛地说,在其他语言中可能被称为“类型错误”的事情最终可能在 Python 中成为“对象 X 不支持方法 Y”。

2011-05-17 编辑:

我同意 delnan 的观点,即静态类型对于 Python 是不可能的[显然是错误的]。但是由于我们的怀疑似乎并没有阻止你,我只能给你更多关于这个主题的信息。我介绍:

  • 关于 type inference for Python 的讨论. (其他链接来自这里。)
  • Guido van van Rossum 关于添加可选静态类型的文章:part 1part 2 .
  • RPython ,这是 Python 的一个子集,可能会被静态分析到足以进行某种形式的类型检查。

关于python - Python 中的静态类型检查工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6025714/

相关文章:

python - Pandas 错误 - 将多个文件 append 到一个文件中

python - 如何设置 QInputDialog 的选项

typescript - TS 标记字符串作为对象的键

clojure - Clojure静态输入

language-agnostic - 不需要声明变量类型的语言的质量是否是弱类型或动态类型的示例

class - 有没有静态鸭子类型(duck typing)的语言?

python - 从 Django-admin 中删除默认应用程序

python - 如何制作用于电影评论数据集分类的数据框?

python - 有没有一种简单的方法可以在 Python 中操作 XML 文档?

python - 通过类型注释对 Python 中的类型构造函数进行抽象