Python学习教程:用Cython加速Python代码,快到你想不到

如果你曾经用Python编写过代码,那么等待某些代码块执行的时间可能比您希望的要长。虽然有一些方法可以提高代码的效率,但它很可能仍然比C代码慢。这主要归结为一个事实:Python是一种动态编程语言,它将许多东西移动到C在编译期间负责的运行时。

不过,如果您像我一样喜欢用Python编写代码,并且仍然希望加快代码的速度,那么您可以考虑使用Cython。虽然Cython本身是一种独立的编程语言,但是很容易将其融入到您的工作流程中,例如Jupyter Notebook。在执行时,Cython将您的Python代码转换为C,通常会显著地加快速度

安装Cython

为了能够使用Cython,您需要一个C编译器。因此,安装过程会根据您当前的操作系统而有所不同。对于Linux,通常存在GNUC编译器(gncc)。对于Mac OS,您可以下载Xcode来获得gncc。如果您应该使用Windows,安装过程会稍微复杂一些。更多信息请访问Cython’s GitHub。

一旦你有了C编译器,你需要在你的终端运行的是:

1pip install Cython

如何使用Cython

演示Cython功能的最简单方法是通过Jupyter Notebooks。要在我们的笔记本中使用Cython,我们将使用IPython magic命令。Magic命令以百分号开始,并提供一些额外的功能,这些功能可以增强工作流。通常,有两种类型的Magic命令:

  1. 行magic由单个“%”表示,并且只在一行输入进行操作
  2. 单元格magic由两个“%”表示,并在多行输入上操作。

让我们开始:

首先,为了能够使用Cython,我们必须运行:

1%load_ext Cython

现在,每当我们想在代码单元中运行Cython时,我们必须首先将以下magic命令放入单元格:

1%%cython

完成这些之后,就可以开始编写Cython代码了。

Cython跑得有多快?

与普通Python代码相比,Cython的速度快多少实际上取决于代码本身。例如,如果您正在运行具有许多变量的计算开销较大的循环,Cython将大大优于常规Python代码。递归函数也会使Cython比Python快很多。

让我们用斐波那契数列来证明这一点。简单地说,这个算法通过把前两个数相加找到下一个数。下面是Python中可能出现的情况:

我们来让Python工作:

如大家看到的,找到序列中的第39个数字花费了13.3秒。这里的wall time是指从函数调用开始到结束所花费的总时间。

让我们在Cython中定义相同的函数。

这是怎么回事?正如你所看到的,我们正在使用一些单元魔法,使我们可以在这个单元中使用Cython。我将很快解释“-a”选项的作用。然后,我们基本上使用与上面相同的代码,只是现在我们能够使用静态类型声明并将n定义为integer类型。

正如您所看到的,通过在magic命令后面添加’ -a ‘,我们收到了一些注释,这些注释向我们展示了代码中有多少Python交互。这里的目标是去掉所有的黄线,让它们有一个白色的背景。在这种情况下,将不存在Python交互,所有代码都将在C中运行。您还可以单击每行旁边的“+”符号,查看Python代码的C转换。

这个代码快了多少?让我们看看:

本例中,Cython的速度大约是Python的6.75倍。这清楚地展示了利用Cython节省时间的能力,与常规Python代码相比,Cython提供了最大的改进。

附加选项

如果您已经了解C语言,Cython还允许访问C代码,而Cython的创建者还没有为这些代码添加现成的声明。例如,使用以下代码,可以为C函数生成Python包装器并将其添加到模块dict中。

Cython证明了许多额外的功能,比如并行性,这些功能在文档中都得到了很好的描述,您可以在这里找到这些功能。

结论

如果伙伴们有时遇到不得不等待太长时间才能执行python代码的问题,那么cython提供了一种非常灵活的集成和高效的方法来加速代码的执行。最重要的是,如果你对C稍微熟悉一点,它提供了许多进一步优化代码的功能。伙伴们优势吗好的意见或者建议可以留言哈,更多的Python学习教程和小技巧也会不定期为大家更新!

原文地址:https://www.cnblogs.com/cherry-tang/p/11283857.html

时间: 2024-10-11 12:07:51

Python学习教程:用Cython加速Python代码,快到你想不到的相关文章

Python学习教程:如何用python统计代码行数

Python学习教程:如何用python统计代码行数 改良后的代码可以对python和C系列的代码实行行数计算,包括代码.空行和注释行,用re抓取注释,传入一个目录自动对其下的文件进行读取计算 流程 首先判断传入参数是否为文件夹,不是则打印出提示,否则继续(无返回),获得目录后,yongos.listdir对路径下文件进行遍历,其中也包含文件夹,再次判断是否为文件夹,是的话则递归调用此函数,否则开始执行行数统计,这里用os.path.join将路径与文件名进行拼接,方便之后直接传给函数,逻辑很简

Python学习教程:WEB开发——Python WSGI协议详解

Web应用程序开发 Web应用程序的本质是什么 简单描述Web应用程序的本质,就是我们通过浏览器访问互联网上指定的网页文件展示到浏览器上. 流程如下图: 从更深层次一点的技术角度来看,由以下几个步骤: 浏览器,将要请求的内容按照HTTP协议发送服务端 服务端,根据请求内容找到指定的HTML页面 浏览器,解析请求到的HTML内容展示出来 HTTP协议的全称是HyperText Transfer Protocol(超文本传输协议) HTTP协议是我们常用的五层协议中的应用层(5层从上到下是应用层,传

Python学习教程(Python学习路线+Python学习视频):Python数据结构

Python学习教程(Python学习路线+Python学习视频):Python数据结构   数据结构引言:   数据结构是组织数据的方式,以便能够更好的存储和获取数据.数据结构定义数据之间的关系和对这些数据的操作方式.数据结构屏蔽了数据存储和操作的细节,让程序员能更好的处理业务逻辑,同时拥有快速的数据存储和获取方式. 在这篇文章中,你将了解到多种数据结构以及这些数据结构在Python中实现的方式.    抽象数据类型和数据结构 数据结构是抽象数据类型(ADT)的实现,通常,是通过编程语言提供的

2019最新Python学习教程(Python学习路线_Python爬虫教程)爬虫工程师必备的10个爬虫工具

2019最新Python学习教程(Python学习路线_Python爬虫教程)爬虫工程师必备的10个爬虫工具 爬虫工程师必备的10个爬虫工具! 最近很多学爬虫的伙伴让推荐顺手的爬虫工具,总结了一下,把这些好用的爬虫工具都跟你们找齐活了! 磨刀不误砍柴工!都知道工欲善其事必先利其器,那么作为经常要和各大网站做拉锯战的爬虫工程师们,更需要利用利用好身边的一切法器,才能更快的攻破对方防线.这里以日常爬虫流程,给大家介绍十款爬虫工具,相信大家掌握以后,工作效率提高是完全没有问题了! 大家也可以看看有你们

Python学习教程:人生苦短,我用Python?入门前你要知道这些

有多少伙伴是因为一句 ‘人生苦短,我用Python’就要去学Python的? 之前也大家更新过Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Python入门前,一定要知道这些,你只有了解它,才能深入它! python是什么?  编程开发语言有很多种,通常大家把开发语言划分为静态编译和动态解析语言,静态编译语言有我们常见的c,c++等,动态解析语言有我们常见的python,php等.静态编译语言其中一个明显的特征是:需要对源代码进行编译成可执行

Python学习教程_Python学习路线:Python3里你不知道的秘密特性

Python学习教程_Python学习路线:Python3里你不知道的秘密特性 概述 到2020年,Python2的官方维护期就要结束了,越来越多的Python项目从Python2切换到了Python3.其实在实际工作中,很多伙伴都还是在用Python2的思维写Python3的代码.给大家总结一下Python3一些新的更方便的特性!希望你们看完后也能高效率的编写代码 f-strings (3.6+) 在Python里面,我们经常使用format函数来格式化字符串,例如: user = "Jane

Python学习教程(Python学习路线):教你如何在交互式环境中执行Python程序

Python学习教程(Python学习路线):教你如何在交互式环境中执行Python程序 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Python基础的内容,以Windows下交互式环境为依托,演示Python程序的运行. 一般来说,顺利安装Python之后,有两种方式可以进入Python交互性环境.一种是在Python自带的IDLE中直接打开交互式窗

Python学习教程:最全Python110道面试题!面试你肯定用得上!

Python学习教程(Python学习路线):最全Python面试题! 为了大家更好的消化,这里分成几次给大家出题目和教程! 1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 函数内部global声明 修改全局变量 3.列出5个python标准库 os:提供了不少与操作系统相关联的函数 sys: 通常用于命令行参数 re: 正则匹配 math: 数学运算 datetime:处理日期时间 4.字典如何删除键和合并两个字典 del和update方法 5.谈

Python学习教程(Python学习路线):Python面试100题(二)

Python学习教程(Python学习路线):面试题接着给大家整理! 16.<div class="nam">中国</div>,用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的 17.python中断言方法举例 assert()方法,断言成功,则程序继续执行,断言失败,则程序报错 18.数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句 select distinct