首先安装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
如果你的命令行出现如下错误:
就需要安装visual studio c++ 14.0,我上网上找了一篇博客可以直接提取百度网盘文件,博客链接:
https://blog.csdn.net/tszupup/article/details/83536673
真心感谢这位博主~
安装好了之后继续执行上面给的命令,就会成功:
成功之后再创建一个测试文件test.py
:
import time
from fibo import fib
start = time.time()
result = fib(40)
end = time.time()
print('斐波拉契数列第40项为:' + str(result)+
'耗时:'+str(end - start)+'秒')
现在我的文件目录是这样的:
下面运行test.py
文件:
运行如下代码耗时为:
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文件中寻找。