Python、C、C扩展、Cython 差异对比,98%的人都不知道

本文对比了Python、C语言、C扩展和Cython在实现斐波那契数列时的效率差异,揭示了Python for循环慢的原因。Cython通过预定义变量类型提供性能提升,其编译后的C代码经过优化,减少了Python对象的类型检查和内存分配。文章指出,Cython在CPU密集型任务上表现优越,但在内存、I/O或网络密集型任务中优势不明显。使用Cython前,应先分析性能瓶颈并确保正确应用。
摘要由CSDN通过智能技术生成

我们以简单的斐波那契数列为例,来测试一下它们执行效率的差异。

Python 代码:

def fib(n):
    a, b = 0.0, 1.0
    for i in range(n):
        a, b = a + b, a
    return a

C 代码:

double cfib(int n) {
   
    int i;
    double a=0.0, b=1.0, tmp;
    for (i=0; i<n; ++i) {
   
        tmp = a; a = a + b; b = tmp;
    }
    return a;
}

上面便是 C 实现的一个斐波那契数列,可能有人好奇为什么我们使用浮点型,而不是整型呢?答案是 C 的整型是有范围的,所以我们使用 double,而且 Python 的 float 在底层对应的是 PyFloatObject、其内部也是通过 double 来存储的。

C 扩展:

然后是 C 扩展,注意:C 扩展不是我们的重点,写 C 扩展和写 Cython 本质是一样的,都是为 Python 编写扩展模块,但是写 Cython 绝对要比写 C 扩展简单的多。

#include "Python.h"

double cfib(int n) {
   
    int i;
    double a=0.0, b=1.0<
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值