【发布时间】:2013-04-18 21:47:18
【问题描述】:
Python 不会在编译时检查类型,因为它不能,至少在某些情况下是这样。但是有没有人想出一种机制来根据用户的额外注释进行编译时类型检查?像 pylint 这样的东西使用作者的额外保证?我正在考虑类似的事情:
#guarantee(argument=int, return_type=int)
def f(x):
return x + 3
#guarantee(argument=int, return_type=str)
def g(x):
return "%d times" % x
y = f(6)
# works, z = "9 times"
z = g(y)
# error
a = f(z)
此检查器将解释每个函数上方的 cmets,意识到 f(x) 应该只接受 int 但 z 来自 g(x),所以它是 str。有没有类似的产品?
【问题讨论】:
-
我的理解是 PyPy 做的事情有点像这样,但一般来说,人们不会尝试取消 Python,而是使用严格类型的语言。此外,无论如何,Python 中并没有真正意义上的“编译时”。您可以进行静态或动态代码分析,转换为 pyc 可以视为编译,但从根本上讲,任意代码可以在运行时更改系统的任何内容。
标签: python static-analysis pylint