温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Cython比Python快多少

发布时间:2021-11-02 09:12:04 来源:亿速云 阅读:247 作者:iii 栏目:编程语言

本篇内容主要讲解“Cython比Python快多少”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Cython比Python快多少”吧!

很多人仅在性能方面将Python与C进行了比较,没有在快速开发方面比较,就开始抱怨Python太慢了。Python的优点在于,其开发时间非常短,你不必处理指针、内存管理等问题。

多数情况下,开发时间比性能更重要。Python有一个很棒的社区,其中有很多很好的库,很多需求在那都能得到满足。

话虽如此,如果想让Python代码更快该怎么做呢?来试试Cython吧!

Cython: Python的C扩展

如果你同时喜欢Python的简单语法以及C的高性能,那么Cython就是你想要的。你可以使用Cython为Python编写C扩展,其代码将转换为优化的C  / C ++代码。它可以提供高性能,且能在Python项目中使用。

安装Cython

这需要C编译器,你可以根据自己的操作系统安装一个C编译器,然后需要使用如下命令安装Cython:

pipinstall Cython

从静态类型声明中获益

可以将静态类型声明添加到变量和函数,它将提供更好的性能。你可以将所有C类型如int,float,double等用于声明。

在Cython中声明变量

cdef int i =10

这句命令的基本意思是声明一个变量i,它是一个整数。

在Cython中声明函数

cdef intsquare(int x):     return x ** 2

该命令基本上意味着square函数采用整数x作为参数并返回整数值x **  2,即x的平方。导入模块时,cdef声明的函数对Python代码不可见。为了使其可见需要改用cpdef。

在Python中计算阶乘

编写一个Python函数来计算给定整数的阶乘:

effactorial(n):                        if  n >=1:                            return n *factorial(n -1)                        return1

使用Cython让Python更快

首先,要创建一个pyx文件。

cpdef  longfastfactorial:此函数将返回一个long值,因此我们通过在函数名fastfactorial之前放置long来声明它的类型为long。

long n:我们预期n为long值。

cpdef long fastfactorial(long n):                                 if  n >=1:                                     return n * fastfactorial(n-1)                                 return1

接着,我们需要创建一个setup.py文件来将Cython转换为C。

from distutils.core import setup                      fromCython.Buildimport cythonize                      setup(ext_modules =cythonize('fastfac.pyx'))

编译代码

为执行编译,需要运行以下命令:

python3setup.py build_ext –inplace

--inplace:此选项会在你的工作目录中创建一个共享对象文件。

对比

让我们比较一下二者:

from fastfac import fastfactorial                    from fac import factorial                    from timeit import timeit                                       print(timeit('fastfactorial(20)', globalsglobals=globals(), number=10000))  #output: 0.002164322999306023                    print(timeit('factorial(20)', globalsglobals=globals(), number=10000))  #output: 0.18900858898996376

结果惊人,Cython快将近88倍!

到此,相信大家对“Cython比Python快多少”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI