首先安装cpython库:

pip install cython

安装完成之后,单独写一段简单的代码,然后保存为.pyx文件:

def fib(n):
    if n ==1 or n == 2:
        return 1
    return fib(n - 1) + fib(n - 2)

注意一定要保存为.pyx文件,比如我保存为了fibo.pyx文件。
然后再创建一个文件,文件的内容如下:

from setuptools import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize('fibo.pyx'))

我将它重命名为setup.py文件。这个文件的作用是调用 Cython 的cythonize函数把 Python 代码转换为 C 代码。

还有一个要提醒的地方是,最好是将这两个文件放到一个新建的文件夹中。

接下来编译代码:
进入命令行,cd转入那两个文件所在的文件目录,然后输入如下指令:

python setup.py build_ext --inplace

如果你的命令行出现如下错误:

把python翻译成java python翻译成c语言_斐波拉契数列

就需要安装visual studio c++ 14.0


安装好了之后继续执行上面给的命令,就会成功:

把python翻译成java python翻译成c语言_斐波拉契数列_02

成功之后再创建一个测试文件test.py:

import time
from fibo import fib

start = time.time()
result = fib(40)
end = time.time()
print('斐波拉契数列第40项为:' + str(result)+
      '耗时:'+str(end - start)+'秒')

现在我的文件目录是这样的:

把python翻译成java python翻译成c语言_斐波拉契数列_03

下面运行test.py文件:

把python翻译成java python翻译成c语言_斐波拉契数列_04

运行如下代码耗时为:

import time


def fib(n):
    if n ==1 or n == 2:
        return 1
    return fib(n - 1) + fib(n - 2)


start=time.time()
result = fib(40)
end=time.time()
print('斐波拉契数列第40项为:' + str(result)+
      'python版耗时:'+str(end - start)+'秒')
斐波拉契数列第40项为:102334155python版耗时:29.014519453048706秒

可能你会问,当前文件夹下面既然有fast_fib.pyx文件,为什么当我们执行from fast_fib import fib的时候,不会从这个文件里面导入 Python 版本的代码?

这是因为,import只会从后缀为.py/.pyc/.pyo/.so/.pyd的文件中导入模块,不会进入.pyx文件中寻找。