将python代码转化为c语言代码提升速度

首先安装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文件中寻找。

发布了79 篇原创文章 · 获赞 8 · 访问量 3303

猜你喜欢

转载自blog.csdn.net/weixin_43141320/article/details/105531151