2022年 11月 9日

将python代码转化为c语言代码,提高运行效率

将python代码转化为c语言代码,提高运行效率

首先,需要安装cpython库:

pip install cython
  • 1

安装完成之后,写一段简单的代码,例如下面这个利用递归求斐波那契数列的函数,然后保存为.pyx文件:

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

我将它保存为fib.pyx文件
然后再创建一个文件,文件的内容如下:

from setuptools import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize('fib.pyx'))
  • 1
  • 2
  • 3
  • 4

我将它重命名为translate.py文件。这个文件的作用是调用 Cython 的cythonize函数把 Python 代码转换为 C 代码。
还有一个要提醒的地方是里面的文件路径,这里是将他们放在同一个目录下。
接下来编译代码:
进入命令行,cd转入那两个文件所在的文件目录,然后输入如下指令

python translate.py build_ext --inplace
  • 1

如果你的命令行出现如下错误:
1
就需要安装visual studio c++ 14.0
安装好了之后继续执行上面给的命令,就会成功:
1

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

import time
from fib import fib

start = time.time()
result = fib(20)
end = time.time()
print('斐波那契数列第20项为'+ str(result)+'耗时:'+str(end - start)+'秒')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

下面运行test.py文件:

斐波那契数列第40项为102334155耗时:5.765635251998901
  • 1

运行如下代码耗时为:

import time

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

start = time.time()
result = fib(40)
end = time.time()
print('斐波那契数列第20项为'+ str(result)+'耗时:'+str(end - start)+'秒')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
斐波那契数列第40项为102334155耗时:27.247100830078125
  • 1

另外注意:import只会从后缀为.py/.pyc/.pyo/.so/.pyd的文件中导入模块