在Python中实现函数vs C

gfttwv5a  于 2022-12-17  发布在  Python
关注(0)|答案(4)|浏览(111)

在Python中实现一个函数和在C语言中实现然后从Python中调用它之间有什么区别吗(就执行时间而言)?如果有,为什么?

0sgqnhkj

0sgqnhkj1#

Python(至少是“标准的”CPython实现)实际上从来没有编译成本机代码;它被编译成字节码,然后再被解释。2所以一个C函数如果实际上被编译成机器码,运行起来会更快;问题是它是否会产生相关的影响。那么你试图解决的实际问题是什么呢?

sdnqo3pr

sdnqo3pr2#

如果我理解并正确地重申你的问题,你会问,将python Package 在c可执行文件上是否比纯python模块本身更快?答案是,这取决于可执行文件和你正在执行的任务类型。

  1. Python中有一组模块是使用Python C-API编写的。这些模块的性能与 Package C可执行文件相当
    1.另一方面, Package c程序比纯python更快,两者都用合理的逻辑实现了相同的功能。
9wbgstp7

9wbgstp73#

C版本通常更快,但并不总是如此。加速的一个要点是,C代码不必像Python那样动态地查找值(Python有引用语义)。Numpy就是一个很好的例子。Numpy arrays是类型化的,数组中的所有值都有相同的类型,并且存储在内存的连续块中。这就是numpy速度快得多的主要原因,因为它跳过了Python必须做的所有动态变量查找。如果在Python数据结构上操作,算法的最有效C实现可能会变得非常慢,因为Python数据结构中的每个值都必须动态查找。
自己实现这些东西并保存Python C-API的所有麻烦的一个好方法是使用Cython

soat7uwm

soat7uwm4#

一般来说,用C编写的函数比Python编写的要快得多,而且集成起来也要困难得多,因为它涉及到:
1.编译包含Python头文件的C代码,并公开适当的 Package 器代码,以便可以从Python调用;
1.链接到正确的Python库;
1.将生成的共享库部署到适当的位置,以便Python代码可以导入它。
在尝试之前,你需要非常确定收益大于成本,这意味着这应该只保留给你的代码中的性能关键部分,你不能用纯Python做得足够快。
如果您真的需要沿着这条路走下去,Boost.Python可以使任务变得不那么痛苦。

相关问题