Python可以静态输入吗?

时间:2015-07-05 17:49:50

标签: python

我知道Python主要比fortran和c / c ++等语言慢,因为它是解释而不是编译。

我还读到的另一个原因是它很慢,因为它是动态类型的,即你不必声明变量类型,它会自动执行。这非常好,因为它使代码看起来更清晰,你基本上不必过多担心变量类型。

我知道没有很好的理由这样做,因为你可以包装例如。使用Python的fortran代码,但有可能手动覆盖Python的动态类型本质并手动声明所有变量类型,从而提高Python的速度吗?

2 个答案:

答案 0 :(得分:2)

如果我将您的问题解释为 “是否存在Python的静态类型模式?” ,那么Cython可能最接近于提供该功能。

Cython是Python语法的超集 - 几乎任何有效的Python代码也是有效的Cython代码。 Cython编译器将准Python源代码转换为非人眼C,然后可以将其编译为共享对象并作为Python模块加载。

您基本上可以使用Python代码并添加任意数量的静态类型声明。无论何种类型未声明,Cython都会添加必要的样板来正确推断它们,但代价是运行时性能更差。这实际上允许您在完全动态类型的Python代码和完全静态类型的C代码之间选择连续体中的一个点,具体取决于您需要多少运行时性能以及您准备花费多少时间进行优化。它还允许您直接调用C函数,使其成为为外部库编写Python绑定的一种非常方便的方法。

为了更好地了解其在实践中的运作方式,请查看official tutorial

答案 1 :(得分:1)

要明确你的问题就像问你是否可以将C转换为动态类型语言一样奇怪。如果你想重新定义语言,那么你可以做任何你喜欢的事情。我认为我们不再称这种语言为“Python”了。

如果您正在寻找基于动态静态类型(动态找到的静态类型)的加速,请执行该语言,请查看pypy。如果那就是你正在寻找的东西,那也很快。与pypy相关的是RPython,它可以满足您的需求。

之前提到的还有Cython,你可以做什么。