Python是一门优秀的语言,它能让你在短时间内通过极少量代码就能完成许多操作。不仅如此,它还轻松支持多任务处理,比如多进程。

不喜欢Python的人经常会吐嘈Python运行太慢。但是,事实并非如此。尝试以下六个窍门,来为你的Python应用提速。

窍门一:关键代码使用外部功能包

Python简化了许多编程任务,但是对于一些时间敏感的任务,它的表现经常不尽人意。使用C/C++或机器语言的外部功能包处理时间敏感任务,可以有效提高应用的运行效率。这些功能包往往依附于特定的平台,因此你要根据自己所用的平台选择合适的功能包。简而言之,这个窍门要你牺牲应用的可移植性以换取只有通过对底层主机的直接编程才能获得的运行效率。以下是一些你可以选择用来提升效率的功能包:

Cython

Pylnlne

PyPy

Pyrex

这些功能包的用处各有不同。比如说,使用C语言的数据类型,可以使涉及内存操作的任务更高效或者更直观。Pyrex就能帮助Python延展出这样的功能。Pylnline能使你在Python应用中直接使用C代码。内联代码是独立编译的,但是它把所有编译文件都保存在某处,并能充分利用C语言提供的高效率。

窍门二:在排序时使用键

Python含有许多古老的排序规则,这些规则在你创建定制的排序方法时会占用很多时间,而这些排序方法运行时也会拖延程序实际的运行速度。最佳的排序方法其实是尽可能多地使用键和内置的sort()方法。譬如,拿下面的代码来说:

在每段例子里,list都是根据你选择的用作关键参数的索引进行排序的。这个方法不仅对数值类型有效,还同样适用于字符串类型。

窍门三:针对循环的优化

每一种编程语言都强调最优化的循环方案。当使用Python时,你可以借助丰富的技巧让循环程序跑得更快。然而,开发者们经常遗忘的一个技巧是:尽量避免在循环中访问变量的属性。譬如,拿下面的代码来说:

每次你调用str.upper, Python都会计算这个式子的值。然而,如果你把这个求值赋值给一个变量,那么求值的结果就能提前知道,Python程序就能运行得更快。因此,关键就是尽可能减小Python在循环中的工作量。因为Python解释执行的特性,在上面的例子中会大大减慢它的速度。

(注意:优化循环的方法还有很多,这只是其中之一。比如,很多程序员会认为,列表推导式是提高循环速度的最佳方法。关键在于,优化循环方案是提高应用程序运行速度的上佳选择。)

窍门四:使用较新的Python版本

如果你在网上搜索Python,你会发现数不尽的信息都是关于如何升级Python版本。通常,每个版本的Python都会包含优化内容,使其运行速度优于之前的版本。但是,限制因素在于,你最喜欢的函数库有没有同步更新支持新的Python版本。与其争论函数库是否应该更新,关键在于新的Python版本是否足够高效来支持这一更新。

你要保证自己的代码在新版本里还能运行。你需要使用新的函数库才能体验新的Python版本,然后你需要在做出关键性的改动时检查自己的应用。只有当你完成必要的修正之后,你才能体会新版本的不同。

然而,如果你只是确保自己的应用在新版本中可以运行,你很可能会错过新版本提供的新特性。一旦你决定更新,请分析你的应用在新版本下的表现,并检查可能出问题的部分,然后优先针对这些部分应用新版本的特性。只有这样,用户才能在更新之初就觉察到应用性能的改观。

窍门五:尝试多种编码方法

每次创建应用时都使用同一种编码方法几乎无一例外会导致应用的运行效率不尽人意。可以在程序分析时尝试一些试验性的办法。譬如说,在处理字典中的数据项时,你既可以使用安全的方法,先确保数据项已经存在再进行更新,也可以直接对数据项进行更新,把不存在的数据项作为特例分开处理。请看下面第一段代码:

当一开始myDict为空时,这段代码会跑得比较快。然而,通常情况下,myDict填满了数据,至少填有大部分数据,这时换另一种方法会更有效率。

在两种方法中输出结果都是一样的。区别在于输出是如何获得的。跳出常规的思维模式,创建新的编程技巧能使你的应用更有效率。

窍门六:交叉编译你的应用

开发者有时会忘记计算机其实并不理解用来创建现代应用程序的编程语言。计算机理解的是机器语言。为了运行你的应用,你借助一个应用将你所编的人类可读的代码转换成机器可读的代码。有时,你用一种诸如Python这样的语言编写应用,再以C++这样的语言运行你的应用,这在运行的角度来说,是可行的。关键在于,你想你的应用完成什么事情,而你的主机系统能提供什么样的资源。

Nuitka是一款有趣的交叉编译器,能将你的Python代码转化成C++代码。这样,你就可以在native模式下执行自己的应用,而无需依赖于解释器程序。你会发现自己的应用运行效率有了较大的提高,但是这会因平台和任务的差异而有所不同。

(注意:Nuitka现在还处在测试阶段,所以在实际应用中请多加注意。实际上,当下最好还是把它用于实验。此外,关于交叉编译是否为提高运行效率的最佳方法还存在讨论的空间。开发者已经使用交叉编译多年,用来提高应用的速度。记住,每一种解决办法都有利有弊,在把它用于生产环境之前请仔细权衡。)

在使用交叉编译器时,记得确保它支持你所用的Python版本。Nuitka支持Python2.6, 2.7, 3.2和3.3。为了让解决方案生效,你需要一个Python解释器和一个C++编译器。Nuitka支持许多C++编译器,其中包括Microsoft Visual Studio,MinGW和Clang/LLVM。

交叉编译可能造成一些严重问题。比如,在使用Nuitka时,你会发现即便是一个小程序也会消耗巨大的驱动空间。因为Nuitka借助一系列的动态链接库(DDLs)来执行Python的功能。因此,如果你用的是一个资源很有限的系统,这种方法或许不太可行。

结论

前文所述的六个窍门都能帮助你创建运行更有效率的Python应用。但是银弹是不存在的。上述的这些窍门不一定每次都能奏效。在特定的Python的版本下,有的窍门或许比其他的表现更好,但这有时候甚至取决于平台的差异。你需要总结分析你的应用,找到它效率低下的部分,然后尝试这些窍门,找到解决问题的最佳方法。

本文系OneAPM工程师编译整理,想技术文章,请访问OneAPM官方技术博客( http://code.oneapm.com)

OneAPM 是国内首家支持 Python 的应用性能管理云解决方案,通过 Saas 向用户提供统一的入口、友好的界面、便捷的流程,来管理和监控应用程序的性能,并完成从前端、到网络、直至应用代码的端到端应用性能管理。

python提高办公效率-【纯干货】提高Python运行效率的小窍门相关推荐

  1. 100天精通Python丨办公效率篇 —— 12、Python自动化操作 office-word(word转pdf、转docx、段落、表格、标题、页面、格式)

    本文收录于 <100天精通Python专栏 - 快速入门到黑科技>专栏,是由 CSDN 内容合伙人丨全站排名 Top 4 的硬核博主 不吃西红柿 倾力打造. 基础知识篇以理论知识为主,旨在 ...

  2. 100天精通Python丨办公效率篇 —— 11、Python自动化操作 Email(发送邮件、收邮件、邮箱客户端)

    文章目录 一.通过SMTP发送电子邮件 1.1 定义邮件正文 1.2 发送邮件 二.收取电子邮件 2.1 配置账户信息 2.2 连接邮箱服务器 2.3 搜索返回消息ID 2.4 读取邮件 三.使用邮件 ...

  3. 100天精通Python丨办公效率篇 —— 14、Python这些小技巧,让文件管理更加智能

    文章目录 1. 列出文件夹中的所有文件 2. 创建新文件夹 3. 复制文件 4. 删除文件夹 5. 使用 os.walk()方法查找文件 6. 使用 glob 模块查找文件 7. 批量重命名 文件/文 ...

  4. python开课吧官网_开课吧老师详解 学Python真的可以帮助提高办公效率吗

    在工作中你是否有过这样的经历?周围的同事看上去貌似没有做什么事情,每天准时下班;你呢兢兢业业做着本职工作,努力完成领导布置的每一项任务,常常加班到很晚才走.可是最后你身边的那个同事反而深得领导喜爱升职 ...

  5. 推荐8个能极大提高办公效率的软件,让你告别加班

    推荐8个可以提高办公效率的软件,让你告别加班! 1.智办事 智办事的功能非常丰富强大,主要有目标管理和项目管理,甚至可以帮助HR做绩效管理. 智办事的目标管理可以帮助你或者团队自上而下制定和拆解目标, ...

  6. 强势安利5款高质量办公软件,极大提高办公效率

    给大家分享5款非常好用的协同办公软件,提升团队办公效率,让协同办公变得更容易. 1.智办事 智办事是一款基于目标+事为中心,将世界500强的工作方法论产品化,从而帮助中小型企业提升内核组织力,提升业绩 ...

  7. 【Python】办公篇-《极客Python之效率革命》(小甲鱼) 笔记一

    〇.前情提要 学习小甲鱼的使用Python读写Excel文件.这是上篇. 参考: [办公篇]<极客Python之效率革命>(小甲鱼)https://www.bilibili.com/vid ...

  8. 什么是工作流开源框架?可提高办公效率吗?

    如果要提高办公效率,那么采用什么样的软件可以实现?低代码开发平台是近些年得到不少企业喜爱的一种提高效率的软件平台,拥有表单设计.工作流引擎.微服务架构.代码开发套件等多个功能,这种企业级应用低代码开发 ...

  9. windows桌面待办事项_怎么在电脑上添加一款桌面提醒便签小软件提高办公效率...

    对于不少办公室白领来说,Windows电脑是其常用的工作平台.他们一天当中大部分时间,都需要在电脑前度过.也正是因为这样,他们经常在电脑上记录并处理待办事项.当然了,电脑上也有很多可以帮助记录待办事项 ...

  10. 5款提高办公效率的好软件,最后一个绝了

    一个好用的软件可以让我们节省时间,提高办公效率,小编就和大家分享5款提高办公效率的好软件,每一个都可以称作神器,最后一个绝了. 1.电脑文件快速查找搜索神器-Everything Everything ...

最新文章

  1. 面试官:private修饰的方法可以通过反射访问,那么private的意义是什么?
  2. sqlserver安装和简单的使用
  3. UI组件之TextView及其子类(一)TextView和EditText
  4. 人工神经网络模型与分类
  5. IDEA 2018 集成 MyBatis Generator 插件 详解、代码生成
  6. mysql索引原理传送门_MySQL索引底层实现原理
  7. Scrapy读取设置文件(settings.py)
  8. python类中变量作用域_python进阶14变量作用域LEGB
  9. java与html关联_HTML页和ashx页之间的关联
  10. cocos2D中scheduleOnce的陷阱
  11. [php基础]Mysql日期函数:日期时间格式转换函数详解
  12. 5款Mac极速下载工具推荐和下载
  13. 南大Lamda实验室俞扬:我的牛年小结
  14. 喜欢蓝蓝的天空白白的云。这首《 Blue Skies》就是啦。
  15. excel如何去重统计户数_Excel如何去重,然后统计数据?_excel提取数据并去重
  16. 普兰特印花设备A3UV 手机壳 金属裁片 塑料免费打样数码打印机
  17. 经典题:用Java打印空心菱形
  18. oracle 数据泵 network link使用
  19. 位运算——左移和右移
  20. Web框架Django使用概览

热门文章

  1. mongodb c++ driver安装踩坑记
  2. windows10 上运行 linux -- Cygwin
  3. python 数据验证
  4. python3 仿写PHP gzip解压缩
  5. Thread Per Message Pattern
  6. Java并发编程:深入剖析ThreadLocal
  7. Spring Boot 的配置文件
  8. 深入理解abstract class和interface
  9. 初学Python——面向对象编程
  10. Solr中Field常用属性