【Cython】简单使用例程和对比


介绍

CythonPythonC一样,都是一种编程语言,不过Cython是把Cython代码转化为C语言代码,然后再编译成链接库供Python导入使用的。对于Cython写成的类Python代码,不论是否进行C类型的变量声明,都会有一定的速度提升。


一、编写包文件

1、纯Python包

python_calc.py

def Func(n):
    t = 0
    for i in range(n):
        j = i * 2
        for k in range(j):
            t += k*0.1
    return t

2、利用上面的代码写Cython文件

cython_calc.pyx
.pyx文件指代的就是Cython文件(和 .cpp .py .c 类似)

def Func(n):
    t = 0
    for i in range(n):
        j = i * 2
        for k in range(j):
            t += k*0.1
    return t

3、添加C类型声明的Cython文件

cython_calc_ctype,pyx
对上面的代码进行优化,添加类型修饰

def Func(int n):
    cdef double t = 0  # cdef 就是声明 C 类型变量
    cdef int i, j, k
    for i in range(n):
        j = i * 2
        for k in range(j):
            t += k*0.1
    return t

二、包的调用对比

1、编写setup.py文件

setup.py文件相当于C中的makefile,是用来管理代码文件的编译生成的。简单示例如下:

from setuptools import setup
from Cython.Build import cythonize

setup(
    name='Calc app',
    ext_modules=cythonize("cython_calc.pyx", annotate=True),  # annotate=True 会生成Html文件,可用来对照 Python 程序和 C 程序的重合情况
    zip_safe=False,
)

setup(
    name='Calc ctype app',
    ext_modules=cythonize("cython_calc_ctype.pyx", annotate=True),
    zip_safe=False,
)

因为上面编写了两个.pyx文件,所有这里要生成两份库。

2、生成C代码和.pyd文件

在命令行中输入

python setup.py build_ext --inplace

会生成以下的文件:
在这里插入图片描述

其中.c是C语言文件,不过应该不是给人看的,因为就上面的几行代码,生成的C语言有2千多行。
.pyd文件是供Python调用的,在编写Python代码时,可以直接使用import导入。
.html打开后如下:
在这里插入图片描述
其中黄色的部分代表的是与Python交互的部分,颜色越深交互越多。

三、调用速度对比

import time
import python_calc
import cython_calc
import cython_calc_ctype

calc_value = 10000

start = time.time()
print("python ", python_calc.Func(calc_value))  # 调用纯Python
print("time consume: {}".format(time.time()-start))

start = time.time()
print("cython ", cython_calc.Func(calc_value))  # 调用Cython
print("time consume: {}".format(time.time()-start))

start = time.time()
print("cython-ctype ", cython_calc_ctype.Func(calc_value))  # 调用改写类型后的Cython
print("time consume: {}".format(time.time()-start))

运行结果:

python 66651667499.996315
time consume: 4.276027202606201
cython 66651667499.996315
time consume: 2.4274239540100098
cython-ctype 66651667499.996315
time consume: 0.09039545059204102

总结

Cython对于Python代码的提速有一定帮助,尤其是对关键代码进行C类型优化后,速度会提升很多。

参考

Cython英文参考官网
Cython中文版

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值