python高性能写法_Python高性能编程

作者:NebulaDun

博客园:Python高性能编程

前言

python现在已经被广泛使用了,它效率高,平常做一些简单的实验,处理一些数据都可以使用python。

我写这篇文章的目的,是想和大家分享下提升python性能的小技巧,这些技巧在工作和学习中算是非常实用了。接下来文字和简明扼要,直接告诉大家如何高性能使用python,不会涉及到基础知识没比如元组和列表的区别等,需要读者有一定的python基础和算法基础。

列表和元组的选择

他俩的区别我就不再赘述,就使用情况来看,列表是动态的,元组是静态的,想必大家都很喜欢使用列表吧。但是因为列表的超额分配,列表会占用额外的内存的空间,而且初始化列表的时间大约是初始化元组的5倍,因此给大家的建议是,凡是需要存储不会改变的事物,就是用元组吧,或者是说只要在适用的情况下,能用元组就用元组。

迭代器和生成器

迭代器和生成器算是python的一大特色了,迭代器和生成器可以简单理解为,需要迭代的内容不需要全部在内存中,只有在迭代完一个的时候才去生成另外一个。所以,迭代器和生成器一大好处就是节省内存。举个例子,统计10GB文本中单词的个数,显然不能把10GB文件都读到内存中,那么我们可以写如下代码:

with open("test.txt","r") as fr:

# 千万不要写成 data = fr.readlines(),这样就全部读到内存中了

for line in fr:

pass # 统计这一行单词的个数

上面的例子非常简单,只是用来告诉大家这么一个思想,只要会yield和iter基本就能应付日常工作了。

大规模矩阵运算

这一小节可能更适合从事机器学习工作的人。如果你需要进行大规模的矩阵计算,比如计算5万个向量和另外5万个向量的余弦值,请使用numpy库,一个高效的矩阵运算库,凡是需要进行大规模矩阵运算和矢量计算,用numpy就对了。 numpy也是很多使用技巧的,比如尽可能对矩阵使用就地操作来节省内存,即:arr1 += arr2而不是arr1 = arr1 + arr2。

多进程

大家都知道因为全局锁的原因,python无法真正并行,不过我们可以使用多进程模块multiprocessing来实现多进程,直接看代码吧:

import random

import time

from multiprocessing import Pool

def f(x1,x2):

time.sleep(random.randint(3,15))

return x1+x2

if __name__ == "__main__":

pool = Pool(4)

res = []

for i in range(6):

res.append(pool.apply_async(f,args=(i,i)))

pool.close()

pool.join()

res = [i.get() for i in res]

print(res)

其它小技巧高效迭代字典,请使用for k,v in dict.items()

高效连接大量字符串,请使用join函数

需要频繁判断某个元素是否在集合里,请使用字典或者set

能用python内置函数就要用,效率会更高一些,比如filter函数

多使用局部变量,局部变量检索更快,尽量少使用global关键字

迭代pandas的dataframe时,使用df.itertuples()会快很多

无限循环使用while 1

善于去找各种高效的第三方包,python的包真的非常多,当自己当算写一个复杂的功能时,先去搜索一下有没有类似的包

总结

上面基本是我工作中常用到小技巧,python的优点主要是可快速上手和测试结果,可以用来快速验证想法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值