如何使用Cython为Python编写更快的C扩展

技术如何使用Cython为Python编写更快的C扩展本篇文章为大家展示了如何使用Cython为Python编写更快的C扩展,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在我们这

本文向您展示了如何使用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

(0)

相关推荐

  • pl什么意思,JM们,我到底PL了没啊?

    技术pl什么意思,JM们,我到底PL了没啊?我10月份做的造影,当时是备孕十一个月都没有好孕,去医院做了所有检查,除了造影,以前听说造影痛苦一直不敢做,医生也不建议我做,说是备孕时间短,后来等所有检查结果出来一切都没问题

    生活 2021年10月27日
  • PostgreSQL中ExecInsert函数的实现逻辑是什么

    技术PostgreSQL中ExecInsert函数的实现逻辑是什么这篇文章主要介绍“PostgreSQL中ExecInsert函数的实现逻辑是什么”,在日常操作中,相信很多人在PostgreSQL中ExecInsert函

    攻略 2021年11月11日
  • 用比喻的修辞手法写一句话,运用比喻、拟人的修辞手法写句子

    技术用比喻的修辞手法写一句话,运用比喻、拟人的修辞手法写句子1用比喻的修辞手法写一句话、一阵风吹来,树摆动着枝叶,对我们点头微笑。 2、玫瑰在宁静的夜晚向星星眨眼。 3、无数的麦粒在风中微笑,飞舞。 4、在绿色的荷叶间,

    生活 2021年10月22日
  • python单元测试怎样开展(pytest如何实现自动化测试)

    技术Pyhon中如何实现单元测试这篇文章将为大家详细讲解有关Pyhon中如何实现单元测试,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。文件calculator.py#计算器类
    clas

    攻略 2021年12月17日
  • Redis中怎么实现分布式锁

    技术Redis中怎么实现分布式锁本篇内容介绍了“Redis中怎么实现分布式锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成

    2021年10月20日
  • Sqllibs 笔记

    技术Sqllibs 笔记 Sqllibs 笔记Sqllibs
    报错注入
    Background 1
    基础函数version()——MySQL 版本
    user()——数据库用户名
    database()——数

    礼包 2021年12月23日