虽然这个问题很宽泛,但总的来说YES。它确实可以加快您的代码速度,有时甚至可以提高 100 倍。
作为参考,Cython 文档说我引用了
但是,对于性能关键的代码,添加静态类型声明通常很有帮助,因为它们可以让 Cython 摆脱 Python 代码的动态特性并生成更简单、更快的 C 代码 - 有时更快 数量级
像 C/C++ 这样的语言更快的主要原因是它们创建了依赖于机器的汇编语言来调整所有依赖于硬件的优化。这是使用编译器实现的,主要是因为很少有类似
- 静态类型变量
- 循环展开
- 分支预测
等等。
现在,Cython 广泛使用了 静态类型变量 的重要功能之一。由于 python 变量是无类型的,而 C 变量不是,Cython 可以让用户灵活地静态修复其变量的类型。
在 Cython 文档 website 中,他们展示了仅提及类型实际上如何提高了 35% 的性能。
注意 不过,我最后要说的是,在 Cython 中转换 Python 代码时要小心,因为您可能在项目中使用了一些不支持 Cython 的框架/API .有时即使您将代码转换为 Cython,也几乎不会改变内部的任何内容。所以这一切都取决于你的代码。
因此首先确保您的 Python 代码在 Cython 中的完全可移植性,并检查这是否是绝对必要的。
编辑 1 另一件事是在 Cython 中转换代码会降低其可读性,因此请注意这一点。
再次引用 Cython 文档
但是,必须注意,类型声明会使源代码更加冗长,从而降低可读性。因此,不鼓励在没有充分理由的情况下使用它们,例如在基准测试证明它们确实使代码在性能关键部分显着加快时
编辑 2 回答问题 或者我是否需要在 cython 中重写我的代码才能真正看到改进?
否,因为 Cython 编译器会为您完成所有工作。
Cython 编译器会将其转换为对 Python/C API 进行等效调用的 C 代码。
由于 Cython 几乎可以接受任何有效的 Python 源文件,因此入门时最困难的事情之一就是弄清楚如何编译您的扩展。
欲了解更多信息,请访问this