本文向您展示了如何使用Cython为Python编写更快的C扩展。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。
在这个包含7个PyPI库的系列文章中,我们将学习如何解决常见的Python问题。
Python是最流行的编程语言之一,因为它是开源的,用途广泛(如Web编程、商业应用、游戏、科学编程等)。),并且它有一个充满活力和专注的社区来支持它。这个社区让我们可以在Python包索引(PyPI)中拥有如此庞大多样的软件包,来扩展和改进Python,解决不可避免的问题。
在本系列中,我们将介绍七个PyPI库,它们可以帮助您解决常见的Python问题。第一个是Cython,这是一种简化Python编写c扩展的语言。
00-1010使用Python很有趣,但有时,用Python编写的程序可能会很慢。所有的运行时动态调度都会带来很大的成本:有时比用C或Rust等系统语言编写的等价代码慢10倍。
从成本和可靠性的角度来看,将代码迁移到一种全新的语言可能会花费很多:所有手动重写工作将不可避免地引入错误。我们能两全其美吗?
为了练习优化,我们需要一些慢代码。什么比斐波那契数列的意外指数慢?
def fib(n): IFN 2: return 1 return fib(n-1)fib(n-2)由于对fib的调用将导致两次重新调用,这种效率极低的算法将需要很长时间才能执行。例如,在我的新笔记本电脑上,fib(36)大约需要4.5秒。这4.5秒将成为我们探索Python的Cython扩展所能提供的帮助的基准。
使用Cython的正确方法是将其集成到安装程序中。然而,您可以使用pyximport快速尝试。让我们将fib代码放在fib.pyx中,并使用Cython运行它。
importpyximportPyximport。安装()importfib。fib (36)只使用Cython,没有修改代码,这个算法在我的笔记本上花费的时间减少到2.5秒左右。几乎不需要任何努力,这将运行时间减少了近50%。当然,我得到了一个好结果。
来吧,我们可以让它更快。
cpdefinetfib(intn): IFN 2: return 1 return fib(n-1)fib(n-2)我们将fib中的代码改为cpdef定义的函数,并添加了两种类型的注释:它接受一个整数并返回一个整数。
这变得快得多,只花了大约0.05秒。它是如此之快,以至于我可能开始怀疑我的测量方法包含噪声:以前,这种噪声会在信号中丢失。
下次你的Python代码花太多的CPU时间,可能会让粉丝抓狂。为什么不看看Cython能不能解决这个问题?
以上就是如何使用Cython为Python编写更快的c扩展。你学到什么知识或技能了吗?如果你想学习更多的技能或丰富你的知识储备,请关注行业信息渠道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/50255.html