当前位置: 首页 > 科技观察

认为Python太慢?让Cython带你飙车

时间:2023-03-18 17:07:30 科技观察

本文转载自公众号《阅读核心》(ID:AI_Discovery)很多人只是在性能上比较Python和C,而没有在快速方面比较就开始吐槽Python发展太慢。Python的美妙之处在于它的开发时间非常短,你不必处理指针、内存管理等问题。在大多数情况下,开发时间比性能更重要。Python有一个很棒的社区,里面有很多好的库,可以在那里满足很多需求。话虽如此,如果你想让你的Python代码更快呢?试试赛通!Cython:Python的C扩展如果您喜欢Python的简单语法和C的高性能,那么Cython适合您。您可以使用Cython为Python编写C扩展,其代码将转换为优化的C/C++代码。它可以提供高性能,可以在Python项目中使用。图片来源:MoriohInstallCython这需要C编译器。您可以根据您的操作系统安装一个C编译器,然后您需要使用以下命令安装Cython:pipinstallCython静态类型声明的好处您可以为变量和函数添加静态类型声明,这将提供更好的性能。您可以使用所有C类型,如int、float、double等进行声明。Cython中声明变量cdefini=10的命令的基本含义是声明一个变量i,它是一个整数。在Cython中声明函数cdefintsquare(intx):returnx**2这个命令基本上意味着平方函数以整数x作为参数并返回整数值x**2,它是x的平方。导入模块时,由cdef声明的函数对Python代码不可见。要使其可见,需要改用cpdef。在Python中计算阶乘编写一个Python函数来计算给定整数的阶乘:effectorial(n):ifn>=1:returnn*factorial(n-1)return1使用Cython让Python更快来源:unsplash首先,创建一个.pyx文件。cpdeflongfastfactorial:这个函数会返回一个long值,所以我们通过在函数名fastfactorial之前加上long来声明它是long类型。longn:我们希望n是一个long值。cpdeflongfastfactorial(longn):ifn>=1:returnn*fastfactorial(n-1)return1接下来,我们需要创建一个setup.py文件来将Cython转换为C。'))要编译代码,请运行以下命令:python3setup.pybuild_ext--inplace--inplace:此选项将在您的工作目录文档中创建一个共享对象。让我们比较一下两者:fromfastfacimportfastfactorialfromfacimportfactorialfromtimeitimporttimeitprint(timeit('fastfactorial(20)',globalsglobals=globals(),number=10000))#output:0.002164322999306023print(timeit('factorial(20)globals',globals(,number=10000))#output:0.18900858898996376结果很惊人,Cython快了将近88倍!来源:unsplash只要稍微打磨一下就能大大提高Python代码的运行速度,本文只是举例,大家可以进一步优化,效果可能会更好!