python - Python 可以静态类型化吗?

标签 python

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

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

我知道这样做没有很好的理由,因为您可以只包装例如。 fortran 代码与 Python,但是否可以手动覆盖 Python 的这种动态类型特性并手动声明所有变量类型,从而提高 Python 的速度?

最佳答案

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

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

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

要更好地了解它在实践中的工作原理,请查看 official tutorial .

关于python - Python 可以静态类型化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31233268/

相关文章:

python - ModuleNotFoundError : No module named 'tkcalendar'

python - Django CMS "No module named html5lib"

python - Tkinter 窗口关闭后有什么办法可以做一些事情吗?

python - 当 .csv 文件保存在 Python 中的 .zip 文件中时,如何从 url 中抓取 .csv 文件?

Python 3. 需要写入文件,检查是否存在一行,然后重新写入文件

python - 在 fabric 脚本的 psql 命令中转义引号

python - 如何在定义的函数Python3中将列表1中的所有元素替换为列表2中的所有元素

python - 如何用更短和自定义的内容有选择地覆盖 python 帮助(MYclass)中的文本?

python - 在 Python 中将 JSON 转换为 HTML 表

python - Scipy:最小化违反给定界限