我正在使用一个现有的大型Python代码库,并希望开始添加类型注释,这样我就可以获得某种级别的静态检查。我在想象像二郎,强谈,或者打字计划/球拍之类的东西。
我见过快速和脏的装饰器,它们根据函数参数和返回类型注释插入动态检查,但我正在寻找更健壮的东西,并在编译时执行检查。
现在有什么工具可以用于这类事情?我熟悉编译器和类型检查,如果它有良好的基础,我绝对愿意改进一个不完整的工具。
(注意:我不想讨论静态输入的利弊。)
编辑:一个示例:
def put(d, k, v):
d[k] = v我希望能够将put函数注释为具有put<K,V>(dict<K,V>, K, V) -> None类型。
UPDATE:新的佩普484 (2014年9月)为佩普484 3.5+中的静态类型和类型注释定义了一个标准。有一个名为形象化的类型检查工具,它与PEP 484兼容。
发布于 2011-05-17 02:50:27
编辑2016-11-11:刚刚使用形象化。类型提示可以逐步添加。在Python3源代码中,它验证标准的佩普484类型提示。类型仍然可以使用特殊注释在Python 2中表示。吉多喜欢它。
这篇文章最初写于很久以前,在“记忆”成为一件事之前。我在下面保存了这篇文章的原始内容,尽管它并不十分准确。
原始帖子:
您可能想查看一下这个关于Python静态分析的相关StackOverflow文章中提到的一些项目。
总结如下:
由于Python广泛使用鸭型,在其他语言中可能被称为“类型错误”的东西最终可能成为Python中的"object不支持Y方法“。
编辑2011-05-17:
我同意delnan的观点,即Python不可能使用静态类型,这显然是错误的。但由于我们的怀疑似乎并没有阻止你,我只能给你更多的信息,关于这个问题。我出席:
发布于 2014-09-07 21:35:06
你可能会发现形象化很有趣。它是Guido提议列入Python3.5。
发布于 2013-07-01 09:39:09
看看这篇文章:PySonar:用于Python的静态分析器。PySonar是一种使用代码的抽象解释(部分执行)推断类型的工具。它查找程序的所有可能执行路径,并查找所有变量的所有可能类型。
基本上有三个版本的PySonar:
其中没有一项(封闭源1除外)得到充分执行。但基本的想法是,你可以用它作为你工作的基础。
https://stackoverflow.com/questions/6025714
复制相似问题