楼主: 我的素质低
1841 2

[Python] 〖移花接木〗6个Python性能优化技巧 [推广有奖]

已卖:2774份资源

学术权威

83%

还不是VIP/贵宾

-

TA的文库  其他...

〖素质文库〗

结构方程模型

考研资料库

威望
8
论坛币
23391 个
通用积分
28308.6707
学术水平
2705 点
热心指数
2881 点
信用等级
2398 点
经验
228186 点
帖子
2968
精华
52
在线时间
2175 小时
注册时间
2012-11-24
最后登录
2024-1-13

一级伯乐勋章 初级学术勋章 初级热心勋章 初级信用勋章 中级热心勋章 中级学术勋章 中级信用勋章 高级学术勋章 高级热心勋章 高级信用勋章 特级学术勋章

楼主
我的素质低 学生认证  发表于 2015-3-25 23:33:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

    Python是一门非常酷的语言,因为很少的Python代码可以在短时间内做很多事情,并且,Python很容易就能支持多任务和多重处理。


     Python的批评者声称Python性能低效、执行缓慢,但实际上并非如此:尝试以下6个小技巧,可以加快Pytho应用程序。







  1、关键代码可以依赖于扩展包






   

      Python使许多编程任务变得简单,但是对于很关键的任务并不总是提供最好的性能。使用C、C++或者机器语言扩展包来执行关键任务能极大改善性能。这些包是依赖于平台的,也就是说,你必须使用特定的、与你使用的平台相关的包。简而言之,该解决方案提供了一些应用程序的可移植性,以换取性能,您可以获得只有通过直接向底层主机编程。下面这些扩展包你可以考虑添加到你的个人扩展库中:


      这些包有不同的作用和执行方式。例如,Pyrex 让Python处理一些内存任务变得简单高效;PyInline可以直接让你在Python应用程序中使用C代码,虽然内联代码被单独编译,但是如果你能高效的利用C代码,它可以在同一个地方处理每一件事情。





  2、使用关键字排序




     有很多古老的Python代码在执行时将花费额外的时间去创建一个自定义的排序函数。最好的排序方式是使用关键字和默认的sort()方法,看看下面的示例:

  1. import operator
  2. somelist = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]
  3. somelist.sort(key=operator.itemgetter(0))
  4. somelist
  5. #Output = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]
  6. somelist.sort(key=operator.itemgetter(1))
  7. somelist
  8. #Output = [(6, 2, 4), (1, 5, 8), (9, 7, 5)]
  9. somelist.sort(key=operator.itemgetter(2))
  10. somelist
  11. #Output = [(6, 2, 4), (9, 7, 5), (1, 5, 8)],
复制代码




    每一个案例的列表是根据你选择作为关键字参数的索引排序的,这种方式对字符串和数字排序同样适用。




3、优化循环






  

      每一种编程语言都强调循环语句的优化,Python也是一样的。尽管你可以依赖于丰富的技术让循环运行的更快,然而,开发者经常忽略的一个方法是避免在循环内部使用点拼接字符串。对于下面的示例:

  1. lowerlist = ['this', 'is', 'lowercase']
  2. upper = str.upper
  3. upperlist = []
  4. append = upperlist.append
  5. for word in lowerlist:
  6.     append(upper(word))
  7.     print(upperlist)
  8.     #Output = ['THIS', 'IS', 'LOWERCASE']
复制代码




      每一次调用str.upper,Python都会去求这个方法的值。但是如果你把求值的结果放入一个变量中,就能提高程序的性能。这个关键是减少Python内执行的循环次数,因为Python解析这些实例是比较慢的。



4、使用新版本



     任何一个在线上搜索Python资料的人都会发现无数关于Python版本迁移的信息。通常,Python每一个版本都针对之前的一个版本做了优化和改进,以让Python运行的更快。限制因素是你喜欢的函数库是否也针对Python的新版本做了改进。

      当你使用了新的函数库,获得了Python的新版本,你需要保证代码依然能够运行,检查应用,修正差异。

然后,如果你仅仅是保证应用能够在新版本上运行,你可能错过新功能的更新。一旦你做了改进,在新版本下配置应用程序,检查问题区域并优先使用新功能更新,对于之前的升级,用户将看到更大性能的提升。




5、尝试多种编程方法




      每一次你创建应用的时候,都使用同一种编程方法,在某些情况下降导致程序运行会比预期的慢。在分析的过程中做一些小试验。例如,当管理字典中的数据项时,可以采用安全的方法确定数据项是否已经存在并需要更新它,或者你可以直接添加条目,然后处理项目根本不存在的情况。

  1. n = 16
  2. myDict = {}
  3. for i in range(0, n):
  4.     char = 'abcd'[i%4]
  5.     if char not in myDict:
  6.         myDict[char] = 0
  7.         myDict[char] += 1
  8.         print(myDict)
复制代码




      当myDict是空时,上述的代码通常会运行的更快。但当myDict已经有数据填充时,就有更好的方法可以选择:

  1. n = 16
  2. myDict = {}
  3. for i in range(0, n):
  4.     char = 'abcd'[i%4]
  5.     try:
  6.         myDict[char] += 1
  7.     except KeyError:
  8.         myDict[char] = 1
  9.     print(myDict)
复制代码




      两种情况下都输出{'d': 4, 'c': 4, 'b': 4, 'a': 4},唯一的差异是输出是怎么获得的。站在盒子外考虑和创建新的编程技巧都能让你的程序获得更快的运行速度。






6、交叉编译程序




  

      开发者有时会忘记计算机不能识别任何一种现在应用程序语言,它只识别机器代码。为了运行程序,需要一个应用将人类可读的代码转换成计算机能识别的代码。当用一种语言写程序时,例如Python,然后用另外一种语言来运行它,例如C++,从性能角度看是有道理的。这个取决于你想要用这个应用做什么和主机系统能够提供什么资源。



      一个有趣的交叉编译器,Nuitka, 能将Python转换成C++代码,结果是你可以再本机模式下执行应用,而不是依赖于解释器。根据平台和任务中,你可以看到显著的性能提高。


原文:6 Python Performance Tips

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python 移花接木 performance Performan operator 技巧 解决方案 应用程序 小技巧 交叉编译

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
niuniuyiwan + 100 + 100 + 5 + 5 + 5 精彩帖子
Nicolle + 100 + 5 + 5 精彩帖子

总评分: 经验 + 200  论坛币 + 100  学术水平 + 10  热心指数 + 10  信用等级 + 5   查看全部评分

本帖被以下文库推荐

心晴的时候,雨也是晴;心雨的时候,晴也是雨!
扣扣:407117636,欢迎一块儿吐槽!!

沙发
BIG钊钊 学生认证  发表于 2015-3-26 02:27:16
在线时间

藤椅
niuniuyiwan 在职认证  发表于 2015-11-4 09:23:40 来自手机
感谢分享!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-9 07:10