摘自https://www.cnblogs.com/duaimili/p/10275728.html

众所周知,程序的性能好坏影响着用户体验。所以性能是留住用户很重要的一环。Python 语言虽然能做很多事情,但是有一个不足之处,那就是执行效率和性能不够理想。

因此,更有必要进行一定的代码优化来提高 Python 程序的执行效率。本文章主要是输出自己在 Python 程序优化的经验。

01尽量使用内置函数

Python 的标准库中有很多内置函数,它们的运行效率都很高。因为很多标准库是使用 C 语言编写的。Pyhton 的内置函数有:

02拼接字符串

运算符 "+" 不仅能用于加法运算,还能做字符串连接。但是这种效率不是很高。在 Python 中,字符串变量在内存中是不可变的。如果使用 "+" 拼接字符串,内存会先创建一个新字符串,然后将两个旧字符串拼接,再复制到新字符串。推荐使用以下方法:

使用 "%" 运算符连接

这种方式有点像 C 语言中 printf 函数的功能,使用 "%s" 来表示字符串类型参数,再用 "%" 连接一个字符串和一组变量。

1 fir = 'hello'

2 sec = 'monkey'

3 result = '%s, %s' % (fir, sec)

4 print(result)

使用 format() 格式化连接

这种格式化字符串函数是 Python 特有的,属于高级用法。因为它威力强大,不仅支持多种参数类型,还支持对数字格式化。

1 fir = 'hello'

2 sec = 'monkey'

3 result = '{}, {}'.format(fir, sec)

4 print(result)

上述代码使用隐式的位置参数,format() 还能显式指定参数所对应变量的位置。

1 fir = 'hello'

2 sec = 'monkey'

3 result = '{1}, {0}'.format(fir, sec)

4 print(result)

使用 join() 方式

这种算是技巧性办法。join() 方法通常是用于连接列表或元组中的元素。

1 list = ['1', '2', '3']

2 result = '+'.join(list)

3 print(result)

03使用 generator

generator 翻译成中文是生成器。生成器也是一种特殊迭代器。它其实是生成器函数返回生成器的迭代。生成器算是 Python 非常棒的特性。它的出现能帮助大大节省些内存空间。

假如我们要生成从 1 到 10 这 10 个数字,采用列表的方式定义,会占用 10 个地址空间。采用生成器,只会占用一个地址空间。因为生成器并没有把所有的值存在内存中,而是在运行时生成值。所以生成器只能访问一次。

1 # 创建一个从包含 1 到 10 的生成器

2 gen = (i for i in range(10))

3 print(gen)

4 for i in gen:

5 print(i)

04死循环

虽然使用While True和while 1都能实现死循环,但是while 1是单步运算,所以效率会高一点。

1 # 推荐

2 while 1:

3 # todo list

4

5 while True:

6 # todo list

05巧用多重赋值

交换将两个变量的值,我们会立马想到应用一个第三方变量的方法。

1 # 将 a 和 b 两个值互换

2 temp = a

3 a = b

4 b = temp

Python 素有优雅的名声,所以有一个更加优雅又快速的方法,那就是多重赋值。

1 # 将 a 和 b 两个值互换

2 a, b = b, a

06列表的插入与排序

Python 标准库中有个bisect模块是内置模块,它实现了一个算法用于插入元素到有序列表。在一些情况下,这比反复排序列表或构造一个大的列表再排序的效率更高。

1 import bisect

2

3 L = [1,3,3,6,8,12,15]

4 x = 3

5

6 x_insert_point = bisect.bisect_left(L, x)

7 # 在 L 中查找 x,x 存在时返回 x 左侧的位置,x 不存在返回应该插入的位置

8 # 这是3存在于列表中,返回左侧位置1

9 print(x_insert_point)

10

11 x_insert_point = bisect.bisect_right(L, x)

12 # 在 L 中查找 x,x 存在时返回x右侧的位置,x 不存在返回应该插入的位置

13 # 这是3存在于列表中,返回右侧位置3

14 print(x_insert_point)

15

16 x_insort_left = bisect.insort_left(L, x)

17 #将 x 插入到列表 L 中,x 存在时插入在左侧

18 print(L)

19

20 x_insort_rigth = bisect.insort_right(L, x)

21 #将 x 插入到列表L中,x 存在时插入在右侧

22 print(L)

07尽量使用局部变量

Python 检索局部变量比检索全局变量快。因此, 尽量少用 "global" 关键字。

python的执行效率没有c语言高,Python代码优化相关推荐

  1. python是一门什么课程-Python究竟是一门怎样的语言,Python为什么这么火?

    Python究竟是一门怎样的语言? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些 ...

  2. 易语言和python混合编程_关于易语言与Python的一点想法

    易语言与python的一点想法">关于易语言与Python的一点想法 小香蕉 2019年7月11日 说在前面 最近吃饭的时候总是会想很多关于易语言的事情.易语言是我学会的第一门语言,虽 ...

  3. 提高python执行效率_关于提高python程序执行效率的思路和想法

    原博文 2016-06-09 22:25 − 相比编译型语言(C系列)python胜在简介的语法和优雅的动态编程体验,但是在执行效率上,python有解释性语言先天的劣势--执行效率较低,为了让编写出 ...

  4. python真的超过java了吗-Python 的开发效率真的比 Java高吗?

    我觉得Python与任何带有"大型"二字的程序,都是相斥的,甚至"中型"都很难触及.只适合用于"小型"项目,且最好无需维护,用完即丢.否则我 ...

  5. python比java难吗-Python 的开发效率真的比 Java高吗?

    我觉得Python与任何带有"大型"二字的程序,都是相斥的,甚至"中型"都很难触及.只适合用于"小型"项目,且最好无需维护,用完即丢.否则我 ...

  6. asp.net python 开发web 效率_【Django】Python web开发:几个模板系统的性能对比(转)...

    http://blog.chedushi.com/archives/910 结论: 点评一下吧.django就是个渣,不多废话了.webpy的代码很简洁,可惜速度太慢了.bottle看起来快一点,不过 ...

  7. python将excel数据合并_Python语言之Python合并多个Excel数据

    本文主要向大家介绍了Python语言之Python合并多个Excel数据,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 安装模块 1.找到对应的模块 http://www.pyt ...

  8. python怎样执行curl命令_如何使用python执行curl命令

    如何使用python执行curl命令 我想在python中执行curl命令. 通常,我只需要在终端输入命令并按回车键. 但是,我不知道它在python中是如何工作的. 该命令如下所示: curl -d ...

  9. python中执行shell脚本之subprocess模块,python用subprocess执行shell脚本

    用subprocess中的Popen() 方法来得到shell脚本的一些运行结果,并且也可以指定不同的shell内核. 其构造函数为: class subprocess.Popen(args, buf ...

最新文章

  1. 2019年雁栖湖会议重大科学问题面向全球发布
  2. 怎样在Ubuntu 14.04中安装Java
  3. 你以为没有CAD的前辈们画不出复杂的图纸?
  4. K8S 基本架构与常用术语
  5. 架构师的英文缩写_架构师必备的20个英文缩写!看你知道几个?
  6. 换脸软件ZAO被“锤”!微信:我的封杀可能会迟到,但不会缺席
  7. 全栈工程师进阶路线图
  8. proteus三输入与门_proteus元件对照
  9. 【年中总结】与自己来一场博弈,带着温柔与敌意。
  10. html5中歌曲和歌词同步的方法
  11. 【Spring入门】
  12. 小王的架构师之旅路----面试
  13. 经济学模型1-循环流向图
  14. 主成分分析——PCA降维Python实现及碎石图
  15. JavaScript传参的6种方式
  16. C6000 EDMA 使用心得总结
  17. 体系结构2_系列机和兼容
  18. python实时定位_Python实现命令行监控北京实时公交之一
  19. 日内期货交易系统,高手做交易独门策略系统
  20. 台达DVP系列PLC与台达DTA温控器modbus通讯

热门文章

  1. https://www.exploit-db.com/能够成功下载的一个CVE编号
  2. 基于TCP的应用层协议、与基于UDP的应用层协议分别有哪些?
  3. 使用OpenCV对运动员的姿势进行检测
  4. C++库文件和头文件编写教程
  5. 在OpenCV中基于深度学习的边缘检测
  6. 基于3D的结构光的应用
  7. 爱送礼成中国好前任,谢谢你让我认识了快递员
  8. 微信红包如何抢大包、直播反垃圾、老骗局翻新……这一期宅客周刊你值得拥有...
  9. 异构GoldenGate 12c 双向复制配置
  10. 初识hibernate小案例