我们以简单的斐波那契数列为例,来测试一下它们执行效率的差异。
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<