在Python和C中实现一个函数

时间:2011-02-11 11:00:43

标签: python c compilation

在Python中实现一个函数和在C中实现它然后从Python调用它之间是否存在差异(就执行时间而言)?如果是这样,为什么?

4 个答案:

答案 0 :(得分:5)

Python(至少是“标准”CPython实现)从未实际编译为本机机器代码;它编译为字节码然后被解释。因此,实际编译为机器代码的C函数运行得更快;问题是它是否会产生相关的差异。那么你想要解决的实际问题是什么?

答案 1 :(得分:1)

如果我理解并正确地重述你的问题,你会问,如果将python包装在一个c可执行文件上,无论如何比纯python模块本身更快?答案是,它取决于可执行文件和您正在执行的任务类型。

  1. Python中有一组使用Python C-API编写的模块。这些的性能与包装C可执行文件
  2. 相当
  3. 另一方面,包装c程序比纯python更快,它们都用理智的逻辑实现相同的功能。比较difflib用法与包装子进程在diff上的比较。

答案 2 :(得分:1)

C版本通常更快,但并非总是如此。加速的一个要点是C代码不必动态查找值,如Python(Python具有引用语义)。一个很好的例子是Numpy。键入Numpy arrays,数组中的所有值都具有相同的类型,并在内部存储在连续的内存块中。这是numpy如此快得多的主要原因,因为它会跳过Python必须执行的所有动态变量查找。如果算法在Python数据结构上运行,那么算法的最有效C实现可能变得非常慢,其中每个值都必须动态查找。

自己实现这些事情并节省Python C-API的所有麻烦的好方法是使用Cython

答案 3 :(得分:0)

通常,用C语言编写的函数将比Python等效函数快得多。整合起来要困难得多,因为它涉及:

  1. 编译#include Python头文件的C代码,并公开适当的包装器代码,以便可以从Python调用;
  2. 链接正确的Python库;
  3. 将生成的共享库部署到适当的位置,以便Python代码可以导入它。
  4. 您可能希望确保在尝试此操作之前的好处超过成本,这意味着只应保留代码的性能关键部分,而这些部分使用纯Python无法快速完成。

    如果你真的需要沿着这条路走下去,Boost.Python可以让这项任务变得更加痛苦。