您现在的位置是:亿华云 > 域名
使用Cython为Python编写更快的C扩展
亿华云2025-10-08 20:54:49【域名】2人已围观
简介在我们这个包含了 7 个 PyPI 库的系列文章中学习解决常见的 Python 问题的方法。Python 是当今使用最多的流行编程语言之一,因为:它是开源的,它有广泛的用途例如 Web 编程、业务应用
在我们这个包含了 7 个 PyPI 库的使用系列文章中学习解决常见的 Python 问题的方法。
Python 是写更当今使用最多的流行编程语言之一,因为:它是快的C扩开源的,它有广泛的使用用途(例如 Web 编程、业务应用、写更游戏、快的C扩科学编程等等),使用它有一个充满活力和专注的写更社区支持它。这个社区可以让我们在 Python Package Index(PyPI)中有如此庞大、快的C扩多样化的使用软件包,用以扩展和改进 Python 并解决不可避免的写更问题。
在本系列中,快的C扩我们将介绍七个可以帮助你解决常见 Python 问题的使用 PyPI 库。首先是写更 Cython,一个简化 Python 编写 C 扩展的快的香港云服务器C扩语言。
Cython
使用 Python 很有趣,但有时,用它编写的程序可能很慢。所有的运行时动态调度会带来很大的代价:有时它比用 C 或 Rust 等系统语言编写的等效代码慢 10 倍。
将代码迁移到一种全新的语言可能会在成本和可靠性方面付出巨大代价:所有的手工重写工作都将不可避免地引入错误。我们可以两者兼得么?
为了练习一下优化,我们需要一些慢代码。有什么比斐波那契数列的意外指数实现更慢?
def fib(n): if n < 2: return 1 return fib(n-1) + fib(n-2)由于对 fib 的调用会导致两次再次调用,因此这种效率极低的算法需要很长时间才能执行。例如,在我的新笔记本电脑上,fib(36) 需要大约 4.5 秒。这个 4.5 秒会成为我们探索 Python 的 Cython 扩展能提供的帮助的基准。
使用 Cython 的正确方法是将其集成到 setup.py 中。然而,使用 pyximport 可以快速地进行尝试。云服务器让我们将 fib 代码放在 fib.pyx 中并使用 Cython 运行它。
>>> import pyximport; pyximport.install()>>> import fib>>> fib.fib(36)只使用 Cython 而不修改代码,这个算法在我笔记本上花费的时间减少到大约 2.5 秒。几乎无需任何努力,这几乎减少了 50% 的运行时间。当然,得到了一个不错的成果。
加把劲,我们可以让它变得更快。
cpdef int fib(int n): if n < 2: return 1 return fib(n - 1) + fib(n - 2)我们将 fib 中的代码变成用 cpdef 定义的函数,并添加了两个类型注释:它接受一个整数并返回一个整数。
这个变得快多了,大约只用了 0.05 秒。它是如此之快,以至于我可能开始怀疑我的测量方法包含噪声:之前,这种噪声在信号中丢失了。
当下次你的 Python 代码花费太多 CPU 时间时,也许会导致风扇狂转,为何不看看 Cython 是否可以解决问题呢?
在本系列的下一篇文章中,我们将看一下 Black,一个自动纠正代码格式错误的项目。云南idc服务商
(题图:Subgrafik San)
很赞哦!(364)
相关文章
- 为什么现在中文域名觉得好?使用中文域名有什么好处?
- JVM FULL GC 生产问题 II-如何定位内存泄露?
- 懵了!女朋友突然问我MVCC实现原理
- 4款前端开发工具,新手小白怎么选?
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 让我们一起聊一聊极简 Java 工作流
- Java语言跨平台原理是什么?有哪些优势?
- Javascript的对象拷贝
- 在更换域名后,并不是就万事大吉了,我们需要将旧域名做301重定向到新域名上,转移旧域名的权重到新域名上。
- 3月份Github上热门的Java开源项目