在我们这个包含了 7 个 PyPI 库的系列文章中学习解决常见的 Python 问题的方法。

Python 是当今使用最多的流行编程语言之一,因为:它是开源的,它有广泛的用途(例如 Web 编程、业务应用、游戏、科学编程等等),它有一个充满活力和专注的社区支持它。这个社区可以让我们在 Python Package Index(PyPI)中有如此庞大、多样化的软件包,用以扩展和改进 Python 并解决不可避免的问题。

在本系列中,我们将介绍七个可以帮助你解决常见 Python 问题的 PyPI 库。首先是 Cython,一个简化 Python 编写 C 扩展的语言。

Cython

使用 Python 很有趣,但有时,用它编写的程序可能很慢。所有的运行时动态调度会带来很大的代价:有时它比用 C 或 Rust 等系统语言编写的等效代码慢 10 倍。

将代码迁移到一种全新的语言可能会在成本和可靠性方面付出巨大代价:所有的手工重写工作都将不可避免地引入错误。我们可以两者兼得么?

为了练习一下优化,我们需要一些慢代码。有什么比斐波那契数列的意外指数实现更慢?

deffib(n):

ifn<2:

return1

returnfib(n-1)+fib(n-2)

由于对 fib 的调用会导致两次再次调用,因此这种效率极低的算法需要很长时间才能执行。例如,在我的新笔记本电脑上,fib(36) 需要大约 4.5 秒。这个 4.5 秒会成为我们探索 Python 的 Cython 扩展能提供的帮助的基准。

使用 Cython 的正确方法是将其集成到 setup.py 中。然而,使用 pyximport 可以快速地进行尝试。让我们将 fib 代码放在 fib.pyx 中并使用 Cython 运行它。

>>>importpyximport;pyximport.install()

>>>importfib

>>>fib.fib(36)

只使用 Cython 而不修改代码,这个算法在我笔记本上花费的时间减少到大约 2.5 秒。几乎无需任何努力,这几乎减少了 50% 的运行时间。当然,得到了一个不错的成果。

加把劲,我们可以让它变得更快。

cpdefintfib(intn):

ifn<2:

return1

returnfib(n-1)+fib(n-2)

我们将 fib 中的代码变成用 cpdef 定义的函数,并添加了两个类型注释:它接受一个整数并返回一个整数。

这个变得快多了,大约只用了 0.05 秒。它是如此之快,以至于我可能开始怀疑我的测量方法包含噪声:之前,这种噪声在信号中丢失了。

当下次你的 Python 代码花费太多 CPU 时间时,也许会导致风扇狂转,为何不看看 Cython 是否可以解决问题呢?

在本系列的下一篇文章中,我们将看一下 Black,一个自动纠正代码格式错误的项目。

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

将python编程为c_使用Cython为Python编写更快的C扩展相关推荐

  1. python编程用什么电脑好-初学Python编程看哪些书比较好?

    原标题:初学Python编程看哪些书比较好? 我推荐你一些学习Python编程适合看的书,你可以试着看看是不是可以看懂,是不是感兴趣......书中藏着你想要的答案,下面就为大家揭秘学习Python编 ...

  2. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  3. python编程快速上手自动化_《Python编程快速上手 让繁琐工作自动化》完整版PDF...

    image.png <Python编程快速上手 让繁琐工作自动化>完整版PDF 提取码:7qm4 3.jpg 有关本书 累计销售超过10万册 零基础编程者的不二之选 基于Python3编写 ...

  4. python编程入门指南-最简单的Python编程入门指南,没基础也能快速入门Python编程...

    原标题:最简单的Python编程入门指南,没基础也能快速入门Python编程 对Python这门编程语言来讲,几乎是没什么不能做到的.最难的不过是如何入门,也就是你进入Python编程的第一步. 其实 ...

  5. 视频教程-Python编程的术与道:Python语言入门-Python

    Python编程的术与道:Python语言入门 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多项 白勇 ¥ ...

  6. 趣学python编程答案_《趣学Python编程》习题总结

    上周买了本书叫<趣学Python编程>(英文名:Python for kids),昨天看完后把书后面的题都做了下.由于第1.2章没有习题,第13章及之后都是描写实例的章节,因此这个总结性的 ...

  7. 视频教程-Python编程的术与道:Python语言进阶-Python

    Python编程的术与道:Python语言进阶 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多项 白勇 ¥ ...

  8. python编程工资-看到抖音上Python工程师晒得工资条,我沉默了......

    原标题:看到抖音上Python工程师晒得工资条,我沉默了...... 我是个抖音中毒者 闲来无事就喜欢刷抖音 最近刷到了一个Python工程师的工资条 然后我默默的打开看了 然后就默默的关闭了 如今P ...

  9. python编程入门书籍推荐-给刚入门python的朋友推荐几本书

    给刚入门python的朋友推荐几本书 1.python编程 从入门到实践 本书是一本针对所有层次的Python读者而作的Python入门书.全书分两部分:首部分介绍用Python 编程所必须了解的基本 ...

最新文章

  1. 深度无盘 连接服务器失败,深度无盘服务器配置
  2. DNS扫盲系列之五:域名配置ZONE文件
  3. C指针原理(23)-win32汇编及.NET调试
  4. jmeter mysql 连接复用_JMeter 连接MySQL
  5. 信息学奥赛一本通C++语言——1124:矩阵加法
  6. 利用GDB进行远程调试
  7. 23种设计模式(8)-外观模式
  8. Class yii\base\Exception
  9. C语言小技巧之怎么找到需要的部分
  10. 忽略git项目上的任何#39;bin#39;目录
  11. CentOS下通过代理安装rails
  12. 外显子bed文件获取
  13. 为什么说软件测试很重要?
  14. 国内比较好的云服务提供商有哪些?
  15. Java、检查 ISBN-10
  16. Predictive State Temporal Difference Learning 原文翻译预测状态时间差分学习
  17. 修复 Key is stored in legacy trusted.gpg keyring
  18. 开通公众号啦:java4all
  19. oracle角色数达到上限,ROLE启用个数限制
  20. 一部《小猪佩奇》让中国90%的家长感到惭愧

热门文章

  1. 海尔智家股市被看好,增长逻辑令人深思
  2. linux增量编译不成功,Linux学习笔记-增量编译(Makefile进一步使用)
  3. kettle优化抽取数据速度_数据异构工具介绍
  4. oracle先删后建,oracle 建表之前先删除语句
  5. 从0搭建一个Springboot+vue前后端分离项目(八)把数据从后台传到前端进行展示渲染,完善增删改查
  6. 为什么手机网速太慢_为什么手机信号满格,网速却很慢?终于知道为啥了
  7. Python找出列表中出现次数最多的元素三种方式
  8. python教程:循环(while和for)
  9. python中的单引号双引号和三引号
  10. java销售_销售转向java编程的开始之路