Kan*_*dan 39 python static-typing
我正在使用大量现有的Python代码库,并希望开始添加类型注释,以便我可以进行一定程度的静态检查.我想象的是Erlang,Strongtalk或Typed Scheme/Racket.
我见过快速和脏的装饰器,它们根据函数参数和返回类型注释插入动态检查,但我正在寻找更强大的东西并在编译时执行检查.
现在有哪些工具可用于此类事情?我熟悉编译器和类型检查,如果它具有良好的基础,我绝对愿意改进一个不完整的工具.
(注意:我对讨论静态类型的优缺点不感兴趣.)
编辑:一个例子:
def put(d, k, v):
d[k] = v
Run Code Online (Sandbox Code Playgroud)
我希望能够将put函数注释为具有类型put<K,V>(dict<K,V>, K, V) -> None.
更新:新的PEP 484(2014年9月)定义了Python 3.5+中静态类型和类型注释的标准.有一个名为mypy的类型检查工具,它与PEP 484兼容.
Kar*_*tan 16
编辑2016-11-11:只需使用mypy.可以逐渐添加类型提示.在Python 3源代码中,它验证了标准的PEP 484类型提示.类型仍然可以使用特殊注释在Python 2中表达.Guido喜欢它.
这篇文章最初写于mypy之前的很久以前.我保留了帖子的原始内容,尽管它不太准确.
原帖:
您可能想要查看有关Python静态分析的相关StackOverflow帖子中提到的一些项目.
综上所述:
由于Python 广泛使用duck typing,因此在其他语言中可能被称为"类型错误"的东西可能最终成为Python中的"对象X不支持方法Y ".
编辑2011-05-17:
我同意delnan的说法,Python不可能进行静态输入[显然是错误的].但由于我们的怀疑似乎并没有阻止你,我只能给你更多有关这个问题的信息.有请:
看看这篇文章:PySonar:Python的静态分析器.PySonar是一种使用代码的抽象解释(部分执行)推断类型的工具.它找到程序的所有可能的执行路径,并查找所有可能的变量类型.
PySonar基本上有三个版本:
它们都没有(封闭源代码除外)完全实现.但基本的想法是你可以用它作为你工作的基础.
| 归档时间: |
|
| 查看次数: |
13582 次 |
| 最近记录: |