最近我读到我们可以编写 C/C++ 代码并从 python 调用这些模块,我知道 C/C++ 是快速且强类型的,但是如果我编写一些模块然后从 python 调用它,我有什么优势?在什么情况/场景/上下文中实现这个会很好?
提前致谢。
表现。这就是NumPy如此之快的原因(“NumPy 数组:用于高效数值计算的结构”)
如果您需要访问在 python 中没有包装器的系统库(例如:Shapely围绕 libgeos 进行几何计算),或者您正在编写围绕系统库的包装器。
如果您在需要提高速度(并且可以从使用 C 中受益)的函数中遇到性能瓶颈。就像查理说的那样,分析对于确定你是否想要这样做至关重要。
分析您的应用程序。如果确实要花时间在几个可以用 C 重新编码的地方,请考虑这样做。除非分析告诉您确实需要,否则不要这样做。
另一个原因是可能有一个 C/C++ 库,其功能在 python 中不可用。你可以用 C/C++ 编写一个 python 扩展,这样你就可以访问/使用那个 C/C++ 库。
我看到的主要优势是速度。这就是 Python 等动态语言的通用性和灵活性所付出的代价。该语言的执行模型与处理器的执行模型相差很大,因此在运行时的某个地方必须有一个翻译层。
许多应用程序中的重要工作部分可以封装为强类型函数。FFT、卷积、矩阵运算和其他类型的数组处理都是很好的例子,其中紧密编码的编译循环可以胜过纯 Python 解决方案,足以支付运行时数据复制和“环境切换”开销。
“C 作为便携式汇编程序”也可以访问硬件功能以加速这些功能。Python 库可能具有依赖于驱动程序代码的高级接口,而驱动程序代码的使用范围不足以成为 Python 执行模型的一部分。用于视频和音频处理的多媒体硬件以及 CPU 或 GPU 上的阵列处理指令就是示例。
定制混合解决方案的成本在于开发和维护。应用程序的设计、编码、构建、调试和部署增加了复杂性。您还需要具备两种不同编程语言的专业知识。