我正在使用现有的大型 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 1和 part 2 .
- RPython ,这是 Python 的一个子集,可能会被静态分析到足以进行某种形式的类型检查。
关于python - Python 中的静态类型检查工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6025714/