python运行慢-提高python运行速度的几个技巧
使用内置数据类型
内置数据类型非常快,尤其是与我们自定义的类型相比。
这主要是因为内置的数据类型是由 C 实现的,而在 Python 中写的代码运行速度实在无法与之相比。
尽量使用内置函数,去掉属性访问
importmathimporttimedeffunc():
lst=[]for i in range(1, 10000000):
lst.append(math.sqrt(i))#直接调用 sqrt
returnlst
start=time.time()
lst=func()
end=time.time()print(end-start)
运行时间:4.470336198806763秒
from math import sqrt #直接引用特定函数或属性
importtimedeffunc():
lst=[]for i in range(1, 10000000):
lst.append(sqrt(i))#直接调用 sqrt
returnlst
start=time.time()
lst=func()
end=time.time()print(end-start)
运行时间:3.7398300170898438秒
因为在进行属性访问的时候啊,会调用这个对象的 __getattribute__ 或者 __getattr__ 方法,造成了额外的开销,所以导致速度变慢。
使用生成器,例如列表推导式
from math importsqrtimporttimedeffunc():#for 循环改为列表推导式
lst = [sqrt(i) for i in range(1, 10000000)]returnlst
start=time.time()
lst=func()
end=time.time()print(end-start)
列表推导式内的迭代是 C 实现的,所以效率更高。
使用 lru_cache 缓存或持久化
参考:https://www.cnblogs.com/-wenli/p/11441142.html
尽量使用本地变量
程序运行速度与在每个作用域中查找变量有关。
实际上,访问不同作用域的变量速度也是不同的,比如在函数内访问本地变量(最快),访问类层面变量(如 self.name,比较慢),以及全局变量,比如例子中导入的函数 time.time (这种最慢)。
使用numba
介绍
Numba是Python的即时编译器,它最适用于使用NumPy数组和函数以及循环的代码。使用Numba的最常用方法是通过其装饰器集合,可以应用于您的函数来指示Numba编译它们。当调用Numba修饰函数时,它被编译为机器代码“及时”执行,并且您的全部或部分代码随后可以以本机机器代码速度运行!
什么样的代码会被加速?
代码中的数学运算、NumPy或者循环,兼容常用的科学计算包,如numpy、cmath等。
怎么使用?
只需要添加两行代码
导入及使用语法糖
importnumba as nbimportnumpy as npimporttime
@nb.jit(nopython=True)defnb_sum():
arr=[]for i in range(10000000):
arr.append(i)defpy_sum():
arr=[]for i in range(10000000):
arr.append(i)
start=time.time()
nb_sum()
end=time.time()print("numba加速的函数运行时间: %s" % (end -start))
start=time.time()
py_sum()
end=time.time()print("没加速的函数运行时间: %s" % (end - start))
工作原理
Numba读取装饰函数的Python字节码,并将其与有关函数输入参数类型的信息相结合。
它分析并优化您的代码,最后使用LLVM编译器库生成函数的机器代码版本,根据您的CPU功能量身定制。
每次调用函数时都会使用此编译版本。
python运行慢-提高python运行速度的几个技巧相关推荐
- python运行软件-提高Python程序的运行速度
尝试了一下用Python实现的K-Means Clustering算法,抽样了10000篇百科词条,分为1000个类,分词后词语总数为130000左右.如果把1000个类定义为1000个向量,每个向量 ...
- 指定版本的python运行和指定python版本的pip
1. pip在指定Python版本下安装 pip install -t D:\python3.5(32bit)\Lib\site-packages -i https://pypi.douban.com ...
- python安装后如何使用-python运行环境,python安装后如何使用
接下来以win7系统为例 计算机--右键--属性 在左栏找到"高级系统设置" 点击"环境变量" 在系统变量中,找到Path,双击 再字符串的末尾,加一个分号; ...
- python运行电脑要求,Python初学者请注意!别这样直接运行python命令,否则电脑等于“...
Python初学者请注意!别这样直接运行python命令,否则电脑等于" Python初学者请注意!别这样直接运行python命令,否则电脑等于"裸奔" 点击上方&quo ...
- python运行程序-用Python执行程序的4种方式,编程必备
在编写代码中,经常会遇到在 Python程序中打开外部程序的需求,那么在Python里如何打开外部程序呢?今天我们来介绍四种不同的方式,供大家参考收藏. 使用 os.system() os.syste ...
- python效率计算-提高python中重心坐标计算的效率
背景:我试图将一张脸变成另一张不同形状的脸. 为了将一个图像扭曲成另一个图像,我使用面部地标的delaunay三角剖分并将一个肖像的三角形扭曲到第二个肖像的相应三角形.我正在使用重心坐标系将三角形内的 ...
- vscode如何运行python新手教程_VSCODE安装以及使用Python运行调试代码的简单记录
1. VScode安装 官网下载VSCODE https://code.visualstudio.com/ 下载呢windows的x64安装包,安装stable的版本 当前日期 2018.01.15 ...
- python之路-02 Python基础
变量声明及赋值 声明变量:name = "Alex Li" 上述代码声明了一个变量,变量名为: name,变量name的值为:"lanhan" #!Author ...
- python程序启动其他python程序_python中使用fork创建新的进程
python中如果要创建新进程的话,可以使用os模块中的fork方法.为了了解其中工作原理,笔者结合linux的查看进程ps命令,对这个方法做了一些测试. python运行时进程 python一开始运 ...
最新文章
- OpenCV视频分析背景提取与前景提取
- zabbix Server 4.0 监控TCP的12种状态
- python取均匀不重复的随机数
- Android5.1设备无法识别exFAT文件系统的64G TF卡问题
- 《视觉SLAM十四讲》笔记(ch8)
- linux 两个驱动 竞争,Linux设备驱动第五章(并发和竞争)读书笔记(国外英文资料).doc...
- 细细品味C#——文件操作
- hive处理日志,自定义inputformat
- .Net(一):再识面向对象之C#学习总结
- Selenium WebDriver架构
- Mob云验证,让身份验证更简单
- 关于videoplayer
- BatchOutput PDF 2.2.32 Mac 破解版 PDF文档自动批量打印工具
- 【钛坦白】清华大学李建:深度学习在时空大数据分析中的应用(转载)
- 计算机基础a3知识点,《计算机应用基础》期末试卷A(A3版).doc
- WPF Binding绑定模式
- 技术团队分享改进总结
- linux复制整个目录_如何在Linux中复制整个目录?
- matlab中类的用法
- 谷歌逐梦穿戴圈:Wear OS的失败能够靠Pixel Watch挽回吗?