python append函数_让你python代码更快的3个小技巧!速度提高了一倍还多

f99aeca2206b2eb7de8d2154a5755417.png

大家好!今天呢,我们来聊一聊如何加速你的 python 代码。

Python 语言的优点可以列举出许多,语法简单易懂、模块丰富、应用广泛等等。但是世界上没有有完美的东西,python 一个明显缺点就是运行速度慢,至少跟 C 语言没法比。

所以,不安于现状的 Pythoner 就开发了许多工具。其中,最著名的莫过于 Cython 和 Numba。其中 Cython 可以把 Python 代码转成 C 代码执行,而Numba 则是 Python 中的一个 JIT 编译器(即时编译器),以此提高运行效率。

86c59f612846550c35c77913695e9e43.png

不过我们今天不讲这些复杂的工具,看看能不能只通过改进你的 Python 代码以提高速度。

函数

函数可以提高代码的可读性,那么用了函数对程序的执行效率是否有影响呢?我们来做个对比实验。

先来看一个不用函数的版本:

import math

import time

start = time.time() # 开始计时

lst = [] # 定义一个空列表

for i in range(1, 10000000):

lst.append(math.sqrt(i)) # 疯狂地往列表里添加计算结果

end = time.time() # 停止计时

print(end-start)

此代码在我的电脑上输出为2.124(不同配置的电脑结果不一样,可多次运行取平均值)。再来加上函数试一下:

import math

import time

def func():

lst = [] # 定义一个空列表

for i in range(1, 10000000):

lst.append(math.sqrt(i)) # 疯狂地往列表里添加计算结果

return lst # 返回结果

start = time.time() # 开始计时

lst = func()

end = time.time() # 停止计时

print(end-start)

猜下结果会是怎样?

在我的电脑上,使用了函数的程序用了大概花了1.743 秒。多次尝试,基本上都会比上一个版本节省 15~20% 左右时间,这个差距还是存在的。

有人可能会觉得,增加了函数调用,效率可能会低。但实际上,我们这里只是增加了一次调用,影响甚微。而由于 Python 中局部变量全局变量的实现方式不同,使用局部变量效率会高些

所以使用函数不仅提高可读性,用得好还能让代码运行得更快。

去掉属性访问

cbead11b2789d3ee6fc6054fb1198ff4.png

再来看另一个例子,还是刚才的函数版本,我们做一点修改,改变其中导入函数的方式,由 math.sqrt 改为 sqrt:

from math import sqrt # 直接引用特定函数或属性

import time

def func():

lst = []

for i in range(1, 10000000):

lst.append(sqrt(i)) # 直接调用 sqrt

return lst

start = time.time()

lst = func()

end = time.time()

print(end-start)

在其它代码均没有变动的情况下,这个程序的输出时间变成了……

1.413 秒!

居然更快了。这又是为什么呢?

因为在进行属性访问的时候啊,会调用这个对象的 __getattribute__ 或者 __getattr__ 方法,造成了额外的开销,所以导致速度变慢。

列表推导式

最后再来看看列表推导式(List Comprehension),它的效率和普通 for 循环会有不一样吗?

列表推导式

Ist=[i for in range(40000000)]

继续在上一个版本上修改:

from math import sqrt

import time

def func():

# for 循环改为列表推导式

lst = [sqrt(i) for i in range(1, 10000000)]

return lst

start = time.time()

lst = func()

end = time.time()

print(end-start)

结果是0.968秒!

这又是为什么呢?因为列表推导式内的迭代是 C 实现的,所以效率更高。

同最初的版本相比,实现同样的效果,我们仅通过调整代码的写法,速度就提高了一倍还多。

一起学,走得远!

最后

小编近几年在学习Python!对于想学习Python的朋友们,我想说:很多人学了一个星期就放弃了,为什么呢?其实没有好的学习资料给你去学习,你们是很难坚持的,这是小编收集的Python入门学习资料!如下图回复01即可获得!

c50b7b4020031301ca9dad6b5aebc315.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

栅格计算面积

1.进行栅格重分类 2.重分类 3.打开属性,查看像元大小 4.打开属性表 5.添加字段 6.打开字段计算器 7.计算结果如下(单位一般为平方米)

autotools使用

Makefile固然可以帮助make完成它的使命,但要承认的是,编写Makefile确实不是一件轻松的事,尤其对于一个较大的项目而言更是如此。那么,有没有一种轻松的手段生成Makefile而同时又能让我们享受make的优越性呢?本节要讲au…

LSGO软件技术团队2015~2016学年第十三周(1123~1129)总结

团队简述: LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为大数据处理与机器学习。成立几年来为学校…

[转]揭开正则表达式的神秘面纱

揭开正则表达式的神秘面纱关闭高亮[原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref.htm]引言正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符…

智能机器人及其应用ppt课件_一文了解!伺服系统机理及其在工业机器人等领域的应用...

更多,更及时的干货内容,请加我们的微信公众号:wc_sfdj诚邀业内人士及机构向我们投稿,投稿有礼投稿邮箱:tougao51wctt.com来源 | 网络欢迎阅读本篇文章,文末有福利哦!(一)伺服系统综述1、伺服运动…

利用python爬取房价

​公众号二维码 爬取房价网站:(安居客)https://zb.fang.anjuke.com/loupan/all/ 由于该网站每隔一段时间需要进行验证(反爬虫),所以我们为了防止我们爬取信息的时候出现间断,所以需要借助execl来保证信息的连续性。 结果展示

python 计算订单_python实现apriori算法的关联规则之支持度、置信度、提升度

Apriori算法的简介 Apriori算法:使用候选项集找频繁项集 Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集…

LSGO软件技术团队2015~2016学年第十四周(1130~1206)总结

团队简述: LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为大数据处理与机器学习。成立几年来为学校…

java安装和环境配置

下载jdk 网址为https://www.oracle.com/java/technologies/javase-downloads.html 2.安装jdk 3.配置环境 以下都是在系统变量下新建 为jdk安装目录 D:\Program Files\Java\jdk-15.0.2 .;%JAVA_HOME%\bin;%JAVA_HOME%\lib\tool.jar; %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 4.…

在Windows Azure中使用自己的域名

请参考:http://blog.smarx.com/posts/custom-domain-names-in-windows-azure 本文是对这篇文章部分解释和补充。 并请记住,此博客总是能给你在Windows Azure的开发中带来帮助。 域名解析机制浅析 域名解析,本是个很简单的事情:我们如若想将我…

LSGO软件技术团队2015~2016学年第十五周(1207~1213)总结

团队简述: LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为大数据处理与机器学习。成立几年来为学校…

Tomca安装

下载 官网: http://tomcat.apache.org/ 2.安装 默认 3.安装成功

知其所以然(续)

查了一下,上篇知其所以然(以学习算法为例) 是08年7月写的,现在已经是10年11月,过去了两年零4个月,这说明了三件事情:1,一个问题其实你可以一直放在脑子里面,利用暗时间 对…

geoserver安装(war安装+exe安装)

下载 官网:http://geoserver.org/ 方法一 当前只有war版本的 下载结果 tomcat安装最好不要使用exe版本的,因为会出现问题,页面加载不出来,所以大家只需要下载下来解压即可 然后将geoserver安装包中的war文件放到webappx下 然后…

LSGO软件技术团队2015~2016学年第十六周(1214~1220)总结

团队简述: LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为大数据处理与机器学习。成立几年来为学校…

LSGO软件技术团队2015~2016学年第十七周(1221~1227)总结

团队简述: LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为大数据处理与机器学习。成立几年来为学校…

postgresql+postgis安装

下载 官网https://www.postgresql.org/ 作者的电脑为win 下载结果为 postgis要选择下载对应版本的 官网http://www.postgis.org/ 以下安装最好装到除c盘之外的,否则有些安装需要权限,一般为d盘 用户名和密码都设置为postgres postgis安装教程 之前设置过…

aop实现原理_SpringAOP原理分析

目录Spring核心知识SpringAOP原理AOP编程技术什么是AOP编程AOP底层实现原理AOP编程使用Spring核心知识Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述…

MAVEN安装和配置

maven官网下载 https://maven.apache.org/download.cgi

MIPS架构的医院智能导诊系统设计

摘要:通过研究基于MIPS架构的SMP8654芯片的硬件架构,并且利用芯片内部的图形加速引擎GFX的方式实现了具有高清视频显示和图片文字处理功能的播放器。系统以嵌入式Linux和MiniGUI为平台设计了智能导诊系统,提高了医院的导诊就医的服务效率。智…