Python代码运行速度提升技巧!Python远比你想象中的快~

文章目录

  • 前言
  • 一、使用内置函数
  • 二、字符串连接 VS join()
  • 三、创建列表和字典的方式
  • 四、使用 f-Strings
  • 五、使用Comprehensions
  • 六、附录- Python中的内置函数
  • 总结
      • 关于Python技术储备
        • 一、Python所有方向的学习路线
        • 二、Python基础学习视频
        • 三、精品Python学习书籍
        • 四、Python工具包+项目源码合集
        • ①Python工具包
        • ②Python实战案例
        • ③Python小游戏源码
        • 五、面试资料
        • 六、Python兼职渠道


前言

其实,Python 比我们想象的运行的要快。我们之所以有先入为主的认为Python运行慢,可能是我们平常的误用和缺乏使用技巧知识。

接下来让我们看看如何用一些简单的Trick来提高我们程序的运行性能
在这里插入图片描述


一、使用内置函数

Python中的许多内置函数都是用C实现的,并且经过了很好的优化。因此,如果熟悉这些内置函数,就可以提高Python代码的性能。一些常用的内置函数有sum()len()map()max()等。

假设我们有一个包含单词的列表,我们希望每个单词的首字母均变为大写。此时使用map()函数是不错的选择。

一般版本:

new_list = []
word_list = ["i", "am", "a", "python", "programmer"]
for word in word_list:
    new_list.append(word.capitalize())

改进版本:

word_list = ["i", "am", "a", "python", "programmer"]
new_list = list(map(str.capitalize, word_list))

时间对比:

import time
new_list = []
word_list = ["i", "am", "a", "python", "programmer"]

start = time.time()

for word in word_list:
    new_list.append(word.capitalize())
print(time.time() - start, "seconds")

start = time.time()

new_list = list(map(str.capitalize, word_list))
print(time.time() - start, "seconds")

运行结果:

1.0013580322265625e-05 seconds
4.76837158203125e-06 seconds

可以看出第二种方法运行速度快了将近2倍。

二、字符串连接 VS join()

在Python中,字符串是不可变的,因此我们不能修改它们。
每次当我们连接多个字符串时,我们将会创建一个新的字符串,此时会导致一些运行性能问题。

一般版本:

new_list = []
word_list = ["I", "am", "a", "Python", "programmer"]
for word in word_list:
    new_list += word

改进版本:

word_list = ["I", "am", "a", "Python", "programmer"]
new_list = "".join(word_list)

时间对比:

import time

new_list = []
word_list = ["I", "am", "a", "Python", "programmer"]

start = time.time()
for word in word_list:
    new_list += word
print(time.time() - start, "seconds")

start = time.time()
new_list = "".join(word_list)
print(time.time() - start, "seconds")

运行结果:

4.0531158447265625e-06 seconds
9.5367431640625e-07 seconds

使用Join()函数可以让代码运行快4倍。

三、创建列表和字典的方式

一般来说,使用[]{}来创建列表和字典相比使用list()dict{}运行更加高效。这是因为使用list()dict{}来创建对象时需要调用一个附加函数。

一般版本:

list()
dict()

改进版本:

()
{}

时间对比:
为了便于对比时间,这里我们使用timeit函数来统计,我们运行1百万次,来看二者的时间对比,代码如下:

import timeit

slower_list = timeit.timeit("list()", number=10**6)
slower_dict = timeit.timeit("dict()", number=10**6)

faster_list = timeit.timeit("[]", number=10**6)
faster_dict = timeit.timeit("{}", number=10**6)

print(slower_list, "seconds")
print(slower_dict, "seconds")
print(faster_list, "seconds")
print(faster_dict, "seconds")

运行结果:

0.08825178800000001 seconds
0.083323732 seconds
0.019935448999999994 seconds
0.027835573000000002 seconds

可以看出,我们的运行速度快了将近4倍。

四、使用 f-Strings

我们已经知道将字符串进行串联可能会使程序变慢。
另一个比较好的解决方案是使用f-Strings
一般版本:

me = "Python"
string = "Make " + me + " faster"

改进版本:

me = "Python"
string = f"Make {me} faster"

时间对比:

import time
me = "Python"

start = time.time()
string = "Make " + me + " faster"
print(time.time() - start, "seconds")

start = time.time()
string = f"Make {me} faster"
print(time.time() - start, "seconds")

运行结果:

2.1457672119140625e-06 seconds
9.5367431640625e-07 seconds

可以看出,我们的运行速度快了将近2倍。

五、使用Comprehensions

Python中的List Comprehensions为我们提供了更短的语法,甚至只有一行代码来实现各种强大的功能。很多用到循环的场景下,我们尽量使用生成式的语法来实现。

一般版本:

new_list = []
existing_list = range(1000000)
for i in existing_list:
    if i % 2 == 1:
        new_list.append(i)

较快版本:

existing_list = range(1000000)
new_list = [i for i in existing_list if i % 2 == 1]

时间对比:

import time

new_list = []
existing_list = range(1000000)

start = time.time()
for i in existing_list:
    if i % 2 == 1:
        new_list.append(i)
print(time.time() - start, "seconds")

start = time.time()
new_list = [i for i in existing_list if i % 2 == 1]
print(time.time() - start, "seconds")

运行结果:

0.16418218612670898 seconds
0.07834219932556152 seconds

可以看出,我们的运行速度快了将近2倍。

六、附录- Python中的内置函数

我们可以通过官网来查看Python的内置函数。
在这里插入图片描述


总结

如果我们只关注上述例子中一些短小的代码片段,这些技巧似乎没有太大的改善。 实际上,我们的项目很容易变得复杂,此时上述技巧就派上用场啦!


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉CSDN大礼包:《Python入门资料&实战源码&安装工具】免费领取安全链接,放心点击

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全数字系列-麦克风K歌模组-搭配投影仪专业方案

麦克风学名传声器,是将声音信号转换为电信号的能量转换器件,也称话筒、微音器;主要包括拾音面和信号放大电路;利用微机械加工技术制作出来的电能换声器,具有体积小、频响特性好、噪声低、高集成度和适于大批量生产的特…

FSOD论文阅读 - 基于卷积和注意力机制的小样本目标检测

来源:知网 标题:基于卷积和注意力机制的小样本目标检测 作者:郭永红,牛海涛,史超,郭铖 郭永红,牛海涛,史超,郭铖.基于卷积和注意力机制的小样本目标检测 [J/OL].兵工学报. https://…

k8s的error: metrics not available yet问题处理

kubectl top node报错处理 解决步骤环境说明问题现象初次排查问题解决版本兼容性metric-server.yaml 问题验证 解决步骤 因项目要求,需在k8s集群中使用 kubectl top node命令,但是一直报error: metrics not available yet错误。为了更好的复现问题&…

Maven:通过相对路径向jar中添加依赖项

问:我有一个专有的jar,我想把它作为一个依赖项添加到我的pom中。 但我不想把它添加到存储库中。原因是我希望常用的maven命令(如mvn compile等)能够开箱即用。(无需要求开发人员自己将其添加到某个存储库中)。 我希望jar在源代码控制中的第三方库中&…

代码安全之代码混淆及加固(Android)

​ 目录 代码安全之代码混淆及加固(Android)🔒 摘要 引言 正文 代码混淆 代码加固 总结 参考资料 摘要 本文将介绍如何通过代码混淆和加固来保护Android应用的代码安全性。代码混淆是将代码进行加密,使其难以被反编译获得…

TikTok:传承文化多样性,扬播全球声音

在数字时代,社交媒体平台已经成为了传播文化多样性和全球声音的重要渠道。其中,TikTok无疑是最引人注目的之一。 这个短视频应用在短短几年内迅速崭露头角,吸引了全球数亿用户,成为一个独特的文化传媒工具,通过短视频…

2013年11月10日 Go生态洞察:Go语言四周年回顾

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

AR贴纸特效SDK,无缝贴合的虚拟体验

增强现实(AR)技术已经成为了企业和个人开发者的新宠。它通过将虚拟元素与现实世界相结合,为用户提供了一种全新的交互体验。然而,如何将AR贴纸完美贴合在人脸的面部,同时支持多张人脸的检测和标点及特效添加&#xff0…

一本了解生成式人工智能

上周,发了一篇关于大语言模型图数据库技术相结合的文章,引起了很多朋友的兴趣。当然了,这项技术本身就让俺们很兴奋,比如我就是从事图研发的,当然会非常关注它在图领域的应用与相互促就啦。 纵观人类文明历史&#xff…

java基本类型等API 基本语法

目录 数组 字符 API java的逻辑表达是必须是布尔值,不能是整数 必须写上!0 java的两个对象判断时候回判断地址是否相等--例如两个字符串用equals 数组 字符串在编程中可以用来存储文本信息,而字符数组则只能用来存储字符 数组转为字符串Arrays.toString 字符…

springboot集成swagger3+解决页面无法访问问题

引入依赖 pom文件引入swagger3依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>配置启动文件 swagger使用ant_pattern_parser解析…

RedisTemplate乱码问题

其实这是在解决一个项目问题是发现的&#xff0c;因为原开发者的大意&#xff0c;造成了系统出现严重的逻辑问题。 因为系统系统采用分模块开发&#xff0c;某模块使用Spring提供的RedisTemplate进行值的读写&#xff0c;另一位使用了框架基于Jedis的一套公用方法进行值的读写…

【C++面向对象】11. 数据抽象*

文章目录 【 1. 访问标签强制抽象 】【 2. 设计策略 】 数据抽象 是指只向外界提供关键信息&#xff0c;并隐藏其后台的实现细节&#xff0c;即只表现必要的信息而不呈现细节。数据抽象是一种依赖于接口和实现分离的编程&#xff08;设计&#xff09;技术。数据抽象的好处&…

SoftwareTest7 - JUnit 是个啥 ? 他跟 Selenium 有什么关系 ?

JUnit 是个啥 ? 他跟 Selenium 有什么关系 ? 一 . 相关注解1.1 Test1.2 BeforeEach1.3 BeforeAll1.4 AfterEach1.5 AfterAll 二 . 断言2.1 assertEquals2.2 assertNotEquals2.3 assertTrue / assertFalse : 断言结果为真/假2.4 assertNull / assertNotNull : 断言结果为空 / …

PY32F002B从压缩包到实现串口printf输出

最近学习使用芯领的PY32F002B开发板&#xff0c;记录学习历程供有同样需求的人参考。 本文主要讲述利用开发板实现printf语句串口输出。 开发环境的初步搭建 官方提供了一个压缩文件&#xff0c;文件名py32f002B_231026.zip&#xff0c; 链接&#xff1a;https://pan.baidu.c…

Arthas应用诊断

一、介绍 rthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c…

创建一个前后端分离项目:Vue+SpringBoot

这是一个基于SpringBootVue3的前后端分离的项目&#xff0c;麻雀虽小&#xff0c;五脏俱全&#xff0c;开箱即用&#xff01; 这先粗略描述一下它的前后端。JNPF开发平台的前端采用的是Vue.js&#xff0c;这是一种流行的前端JavaScript框架&#xff0c;用于构建用户界面。 后端…

Avatar虚拟形象解决方案,趣味化的视频拍摄与直播新体验

企业们正在寻找新的方式来吸引和保持观众的注意力,一种新兴的解决方案就是使用Avatar虚拟形象技术&#xff0c;这种技术可以让用户在视频拍摄或直播场景中&#xff0c;以自定义的数字人形象出现&#xff0c;同时保持所有的表情和脸部驱动。美摄科技正是这个领域的领军者&#x…

自学SLAM(8)《第四讲:相机模型与非线性优化》作业

前言 小编研究生的研究方向是视觉SLAM&#xff0c;目前在自学&#xff0c;本篇文章为初学高翔老师课的第四次作业。 文章目录 前言1.图像去畸变2.双目视差的使用3.矩阵微分4.高斯牛顿法的曲线拟合实验 1.图像去畸变 现实⽣活中的图像总存在畸变。原则上来说&#xff0c;针孔透…