如果你曾经用Python写过代码,你可能花在等待某些代码块执行上的时间比你想的要多。虽然有一些方法可以使您的代码更高效,但它很可能仍然比C代码慢。这主要归结为这样一个事实,即Python是一种动态编程语言,并且卸载运行C在编译期间处理的许多事情。但是,如果您喜欢用Python编写代码并且仍想加快代码速度,请考虑使用Cython。虽然Cython本身就是一种独立的编程语言,但它很容易融入您的工作流程。在执行时,Cython将Python代码转换为C,通常会产生显着的加速。安装Cython为了能够使用Cython,您需要一个C编译器。因此,安装过程因您当前的操作系统而异。对于Linux,通常有GNUC编译器(gncc)。对于MacOS,您可以下载Xcode以获取gncc。如果您应该使用Windows,则安装过程会稍微复杂一些。有关更多信息,请访问Cython的GitHub:https://github.com/cython/cython/wiki/InstallingOnWindows一旦您有了C编译器,您需要在终端中运行的是:pipinstallCython如何使用Cython展示Cython最简单的方法访问函数是通过Jupyter笔记本。要在我们的笔记本中使用Cython,我们将使用IPython魔术命令。魔术命令以百分号开头,并提供一些附加功能来增强您的工作流程。一般来说,有两种魔法命令:行魔法用一个“%”表示,只对输入的一行进行操作单元格魔法用两个“%”表示,对多行输入进行操作。让我们开始吧:首先,为了能够使用Cython,我们必须运行:%load_extCython现在,每当我们想在代码单元中运行Cython时,我们必须首先在单元中放置以下魔术命令:%%cythonOnce完成后,您可以开始使用Cython进行编码。Cython比普通Python代码快多少实际上取决于代码本身。例如,如果您正在运行一个包含许多变量的计算量大的循环,Cython的性能将明显优于常规Python代码。递归函数还使Cython比Python快得多。让我们用斐波那契数列来证明这一点。简单地说,该算法通过将前两个数字相加来找到下一个数字。这是它在Python中的样子:defbonacci(n):ifn<0:print("1stfibonaccinumber=0")elifn==1:return0elifn==2:return1else:returnfibonacci(n-1)+fibonacci(n-2)首先,为了能够使用Cython,我们必须运行:如您所见,找到序列中的第39个数字用了13.3秒。这里的Walltime是指函数调用从开始到结束所花费的总时间。让我们在Cython中定义相同的函数。这里发生了什么?如您所见,我们在顶部使用了一些单元魔法,允许我们在此单元中使用Cython。稍后我将解释“-a”选项的作用。然后我们基本上采用与上面相同的代码,除了现在我们能够使用静态类型声明并将n定义为整数类型。如您所见,通过在这个神奇的命令后添加“-a”,我们收到了显示代码中有多少Python交互的评论。这里的目标是摆脱所有的黄线并用白色背景代替它们。在这种情况下,没有Python交互,所有代码都将在C中运行。您也可以单击每行旁边的“+”号来查看Python代码的C翻译。代码快多少?让我们看看:在这种情况下,Cython比Python快大约6.75倍。这清楚地展示了使用Cython的省时功能,其中Cython提供了对常规Python代码的改进。
