当前位置: 首页 > news >正文

个人网站开发协议/微信群二维码推广平台

个人网站开发协议,微信群二维码推广平台,wordpress主题子主题运行速度,源码打包成app原标题:一招把你的 Python 代码提速7倍在我们以前的文章中,曾经讲过计算斐波那契数列的几种方法,其中基于递归的方法是速度最慢的,例如计算第40项的值,需要36秒。如下图所示:要提高运算速度,根本…

原标题:一招把你的 Python 代码提速7倍

07a432e2c57c3bfd8fb2539f79242ee6.png

在我们以前的文章中,曾经讲过计算斐波那契数列的几种方法,其中基于递归的方法是速度最慢的,例如计算第40项的值,需要36秒。如下图所示:

26e0a34e54ff2bab6d60e38a1ae8805c.png

要提高运算速度,根本办法当然是改进算法。不过算法的提高是一个长期积累加上灵机一动的过程。我们今天要讲的,是一个不费脑筋,立竿见影的方法——把 Python 代码编译成 C 语言代码。通过 C 语言的运行效率来加速计算过程。

这个过程看起来很复杂,但实际上你并不需要编写一行 C 语言代码。你需要做的只是使用一个叫做 Cython 的库把 Python 代码编译为 C 语言代码即可。

首先我们来安装 Cython,就像安装普通的第三方库一样:

python3 -m pip install cython

安装完成以后,我们单独写计算斐波那契数列的函数:

deffib(n):

ifn in[ 1, 2]:

return1

returnfib(n - 1) + fib(n - 2)

非常简单的递归写法。然后关键来了,我们要把这个文件保存为 fast_fib.pyx 。注意后缀是 .pyx 。如下图所示:

6bbb1f0b82bc10b3b1b41602a5d07756.png

然后我们创建一个 setup.py 文件,文件内容如下:

fromsetuptools importsetup

fromCython.Build importcythonize

setup(ext_modules=cythonize( 'fast_fib.pyx'))

如下图所示:

7e4975e80bbfd2ee5d100bc509f00a5e.png

这个文件的作用,就是调用 Cython 的 cythonize 函数把 Python 代码转换为 C 代码。

接下来,开始编译代码,执行如下命令:

python3 setup.py build_ext --inplace

我的 Python 是 Python3.7,所以运行完成以后,会生成一个 fast_fib.cpython-37m-darwin.so ,如果你的 Python 是3.8,这个文件名可能是 fast_fib.cpython-38m-darwin.so 。这个文件你可以改名字,例如改成 fast_fib.so 。

还有一个文件叫做 fast_fib.c 。不过你不用打开这个文件,因为它有3200多行。并且你甚至可以直接把它删掉。真正有用的只有这个 fast_fib.cpython-38m-darwin.so 文件。

你需要做的,仅仅是直接调用你的函数。我们另外创建一个文件 test_fast_fib.py ,内容如下:

importtime

fromfast_fib importfib

start = time.time

result = fib( 40)

end = time.time

print( f'斐波拉契数列第40项为: {result},耗时: {end - start}秒')

运行效果如下图所示:

7b562ec5c50f9099cffbd96421a113dd.png

计算斐波那契数列第40项只需要5秒钟,速度妥妥变成 Python 版本的7倍。

使用 Cython,不仅可以提高程序的运行速度,还可以把你的核心代码转换为 .so 文件,防止别人反编译看到你的代码。

关于 Cython 的更多介绍,请阅读它的 官方文档[1]

有同学可能会问,当前文件夹下面既然有 fast_fib.pyx 文件,为什么当我们执行 from fast_fib import fib 的时候,不会从这个文件里面导入 Python 版本的代码?

这是因为, import 只会从后缀为 .py / .pyc / .pyo / .so 的文件中导入模块,不会进入 .pyx 文件中寻找。

参考资料

[1]

官方文档: https://cython.readthedocs.io/ 返回搜狐,查看更多

责任编辑:

http://www.lbrq.cn/news/1341433.html

相关文章:

  • 哪个网站可以做视频片头/网站域名在哪里查询
  • 佛山做网站/小游戏推广接单平台
  • 建设网站要求/cps广告联盟平台
  • 网站内容设计基本原则/成都调查事务所
  • 优惠券网站做淘客违规吗/新闻20条摘抄大全
  • wordpress地址和找点地址/上海做网站优化
  • 如何构建电子商务网站/免费发帖推广的平台
  • 住房城乡建设部网站首页/seo整体优化
  • 青岛知名网站建设多少钱/网站流量分析的指标有哪些
  • 免费定制网页/山东济南seo整站优化公司
  • 怎么用lamp做网站/每日财经要闻
  • 个人可以做网站么/种子搜索器
  • 网页设计师简历模板/长沙seo推广
  • 初中生怎样做网站赚钱/新站快速收录
  • 湖南省建设厅建管处/北海seo快速排名
  • windows7PHP网站建设/张北网站seo
  • 虎门外贸网站建设公司/百度如何免费打广告
  • 个人网站域名注册/推广普通话宣传周
  • 专业建站哪家好/南京关键词网站排名
  • 长沙制作网站软件/创建一个网站
  • 同城换物网站为什么做不起来/seo服务公司招聘
  • 俄罗斯b2b网站大全/b站免费版入口
  • 电脑网站开发手机上可以打开吗/中国站长素材网
  • 郑州品牌营销网站建设/网站设计与网页制作
  • 男女做那个的免费视频网站/软件开发外包
  • 网站建设目标分析/百度公司网站推广怎么做
  • 怎么做网页商城/seo和sem推广
  • 外贸网站建设公司排名/重庆网站制作系统
  • 推荐大良网站建设/新app推广去哪里找
  • 网站加载等待/海南百度推广开户
  • 【渲染流水线】[几何阶段]-[归一化NDC]以UnityURP为例
  • I2CHAL库接口
  • 【Linux】Tomcat
  • 【linux基础】Linux目录和Windows目录的区别
  • SaaS 版 MES 系统业务文档
  • Money Sums