30年工作经验的程序员老师机,教你如何提高python效率

简介:   Python是一门优秀的语言,它能让你在短时间内通过极少量代码就能完成许多操作。不仅如此,它还轻松支持多任务处理,比如多进程。  不喜欢Python的人经常会吐嘈Python运行太慢。但是,事实并非如此。作为程序猿就是希望如何优化代码,精简代码。  因为GIL的存在,Python很难充分利用多核CPU的优势。但是,可以通过内置的模块multiprocessing实现下面几种并行模式:

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

  不喜欢Python的人经常会吐嘈Python运行太慢。但是,事实并非如此。作为程序猿就是希望如何优化代码,精简代码。

  因为GIL的存在,Python很难充分利用多核CPU的优势。但是,可以通过内置的模块multiprocessing实现下面几种并行模式:

  1、 多进程并行编程:对于CPU密集型的程序,可以使用multiprocessing的Process,Pool等封装好的类,通过多进程的方式实现并行计算。但是因为进程中的通信成本比较大,对于进程之间需要大量数据交互的程序效率未必有大的提高。

  2、 多线程并行编程:对于IO密集型的程序,multiprocessing.dummy模块使用multiprocessing的接口封装threading,使得多线程编程也变得非常轻松(比如可以使用Pool的map接口,简洁高效)。分布式:multiprocessing中的Managers类提供了可以在不同进程之共享数据的方式,可以在此基础上开发出分布式的程序。 不同的业务场景可以选择其中的一种或几种的组合实现程序性能的优化。

  3、 优化算法时间

  算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式,总得来说,一般有分治,分支界限,贪心,动态规划等思想。

  例如:set的用法

  set的union,intersection,difference操作要比list的迭代要快。因此如果涉及到求list交集,并集或者差的问题可以转换为set来操作。

  4、 针对循环的优化

  每种编程语言都会强调需要优化循环。当使用Python的时候,你可以依靠大量的技巧使得循环运行得更快。然而,开发者经常漏掉的一个方法是:避免在一个循环中使用点操作。例如,考虑下面的二手交易平台代码:

  每一次你调用方法str.upper,Python都会求该方法的值。然而,如果你用一个变量代替求得的值,值就变成了已知的,Python就可以更快地执行任务。优化循环的关键,是要减少Python在循环内部执行的工作量,因为Python原生的解释器在那种情况下,真的会减缓执行的速度。

  lowerlist=['this', 'is', 'lowercase']

  upper=str.upper

  upperlist=[]

  append=upperlist.append

  for word in lowerlist:

  append(upper(word))

  print(upperlist)

  #Output=['THIS', 'IS', 'LOWERCASE']

  5、 函数选择

  在循环的时候使用xrange而不是range;使用xrange可以节省大量的系统内存,因为xrange()在序列中每次调用只产生一个整数元素。而range()將直接返回完整的元素列表,用于循环时会有不必要的开销。在python3中xrange不再存在,里面range提供一个可以遍历任意长度的范围的iterator。

  6、 使用性能分析工具

  除了上面在ipython使用到的timeit模块,还有cProfile。cProfile的使用方式也非常简单:python–m cProfile filename.py,filename.py是要运行程序的文件名,可以在标准输出中看到每一个函数被调用的次数和运行的时间,从而找到程序的性能瓶颈,然后可以有针对性地优化。

目录
相关文章
|
1月前
|
存储 缓存 程序员
Python程序员Debug利器,和Print说再见
Python程序员Debug利器,和Print说再见
25 2
|
8月前
|
程序员 Python
中秋节之Python绘制许愿树和月饼(打开程序员世界的大门)
中秋节之Python绘制许愿树和月饼(打开程序员世界的大门)
|
2月前
|
程序员 C语言 Python
[oeasy]python0007_ print函数_字符串_display_电传打字机_程序员的浪漫
[oeasy]python0007_ print函数_字符串_display_电传打字机_程序员的浪漫
37 5
[oeasy]python0007_ print函数_字符串_display_电传打字机_程序员的浪漫
|
2月前
|
Java 开发者 索引
[Python]细节与使用经验
如果文中阐述不全或不对的,多多交流。
36 0
[Python]细节与使用经验
|
3月前
|
存储 程序员 数据处理
Python文件操作与数据持久化:解放程序员的存储之道
在当今大数据时代,程序员需要处理大量的数据,并确保数据的安全和持久性。本文将介绍Python中强大的文件操作功能和数据持久化技术,帮助程序员更好地管理和存储数据,提高工作效率和数据处理能力。
18 1
|
4月前
|
程序员 Python
每个新手程序员都应该知道的 Python 技巧
每个新手程序员都应该知道的 Python 技巧
|
8月前
|
安全 程序员 开发工具
代码版本管理笔记 | Python 程序员也应该会的 Git 分支操作
代码版本管理笔记 | Python 程序员也应该会的 Git 分支操作
128 0
|
8月前
|
数据采集 安全 JavaScript
代码版本管理笔记 | Python 程序员也应该会的 Git 进阶操作
代码版本管理笔记 | Python 程序员也应该会的 Git 进阶操作
118 0
|
8月前
|
数据采集 缓存 安全
代码版本管理笔记 | Python 程序员也应该会的 Git 基础操作
代码版本管理笔记 | Python 程序员也应该会的 Git 基础操作
|
9月前
|
机器学习/深度学习 算法 Python
【CEEMDAN-CNN-LSTM】完备集合经验模态分解-卷积神经长短时记忆神经网络研究(Python代码实现)
【CEEMDAN-CNN-LSTM】完备集合经验模态分解-卷积神经长短时记忆神经网络研究(Python代码实现)

热门文章

最新文章