python程序写完后点哪个运行快_让你的Python运行更快

讨厌Python的人总是说,他们不想使用它的原因之一是它很 慢。嗯,特定程序(无论使用何种编程语言)是快还是慢,在很大程度上取决于编写该程序的开发人员以及编写优化而 快速的 程序的技能和能力 。

因此,让我们证明一些人是错误的,让我们看看如何改善Python程序的性能 并使它们真正更快!

时序分析

在开始进行任何优化之前,我们首先需要找出代码的哪些部分实际上会使整个程序变慢。有时程序的瓶颈可能很明显,但是如果您不知道它在哪里,那么这里有一些可供您选择的选项:

最懒惰的“配置文件”

首先,最简单和诚实的说是非常懒惰的解决方案-Unix time

命令:

如果您只想计时整个程序,这可能会起作用,通常这是不够的……

最详细的分析

另一端是 cProfile,它将为您提供 过多 信息:

在这里,我们使用cProfile模块和 time 参数运行测试脚本 ,以便按内部时间(cumtime)对行进行排序 。这给了我们 很多信息,您在上面看到的行大约是实际输出的10%。由此可见, exp 函数是罪魁祸首( Surprise,Surprise),现在我们可以更详细地了解时序和性能分析...

时序特定功能

现在我们知道了将注意力转移到哪里,我们可能想对慢速函数计时,而不用测量其余的代码。为此,我们可以使用简单的装饰器:

然后可以将此装饰器应用于待测功能,如下所示:

这给我们这样的输出:

有一点要考虑的是 什么样的时间,我们其实(想)措施。时间包提供

time.perf_counter 和 time.process_time。此处的区别是perf_counter返回绝对值,其中包括Python程序进程未运行时的时间,因此它可能会受到计算机负载的影响。另一方面,process_time仅返回用户时间(不包括系统时间),这仅是您的处理时间。

使其更快

现在是有趣的部分。让我们让您的Python程序运行得更快。我(大部分)不会向您展示一些可以神奇地解决您的性能问题的技巧,技巧和代码段。这更多地是关于一般构想和策略的,这些构想和策略在使用时可能会对性能产生巨大影响,在某些情况下,最高可以提高30%。

使用内置数据类型

这个很明显。内置数据类型非常快,特别是与树或链接列表之类的自定义类型相比。这主要是因为内置程序是用C实现的 ,因此在使用Python进行编码时我们的速度实在无法与之匹敌。

使用lru_cache缓存/记忆

使用局部变量

这与在每个作用域中查找变量的速度有关。我正在编写 每个作用域,因为它不只是使用局部变量还是全局变量。实际上,即使在函数(最快),类级属性(例如self.name ,较慢)和全局变量(例如,最慢)等全局 变量之间,查找速度实际上也有所不同 time.time 。您可以通过使用看似不必要(直接无用的)的分配来提高性能,如下所示:

使用函数

这似乎违反直觉,因为调用函数会将更多的东西放到堆栈上,并从函数返回中产生开销,但这与上一点有关。如果仅将整个代码放在一个文件中而不将其放入函数中,则由于全局变量,它的运行速度会慢得多。因此,您可以通过将整个代码包装在main函数中并调用一次来加速代码 ,如下所示:

不访问属性

可能会使程序变慢的另一件事是 点运算符(.),在访问对象属性时使用。该运算符使用触发字典查找 __getattribute__,这会在代码中产生额外的开销。那么,我们如何才能真正避免(限制)使用它呢?

当心字符串

当使用模数 (%s)或 .format()。进行循环运行时,字符串操作可能会变得非常慢 。我们有什么更好的选择?我们唯一应该使用的是 f-string,它是最易读,简洁且最快的方法。因此,根据该推文,这是您可以使用的方法列表-最快到最慢:

生成器本质上并没有更快,因为它们被允许进行惰性计算,从而节省了内存而不是时间。但是,保存的内存可能会导致您的程序实际运行得更快。怎么样?好吧,如果您有一个很大的数据集,并且没有使用生成器(迭代器),那么数据可能会溢出CPU L1缓存,这将大大减慢内存中值的查找。

就性能而言,非常重要的一点是CPU可以将正在处理的所有数据尽可能地保存在缓存中。

结论

优化的首要规则是 不这样做。但是,如果确实需要,那么我希望这些技巧可以帮助您。但是,在优化代码时要小心,因为它可能最终使您的代码难以阅读,因此难以维护,这可能会超出优化的好处。

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

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

相关文章

C语言理论作业—2

1.C语言基本数据类型及其占用的内存空间大小分别是:int:4字节,short[int]:2字节,long[int]:4字节,unsigned[int]:4字节,unsigned short[int]:2字节,unsigned long[int]:4字节,char:1字节&#x…

html 科幻模板,html5酷炫宇宙科幻周年庆典专题动画模板

资源下载此资源下载价格为4D币,请先登录资源文件列表codedown123-0727-39/img/arrow-down-1.png , 1229codedown123-0727-39/img/arrow-down-2.png , 1190codedown123-0727-39/img/arrow-down-3.png , 1132codedown123-0727-39/img/asteroids-left.png , 7015codedo…

SQLServer数据库设置项梳理

一、自动选项AUTO CLOSEON:数据库将在最后一个用户退出后完全关闭,它占用的资源也将释放。当用户尝试再次使用该数据库时,该数据库将自动重新打开OFF:最后一个用户退出后数据库仍保持打开对于SQLServer Desktop Engine或 SQL Serv…

SQLServer创建数据库详解

1、创建数据库介绍在创建数据库之前,需要先确定数据库的名称、所有者、大小、存储该数据库的文件和文件组。数据库所有者:创建数据库的用户。一般情况下,大多数产品对象由数据库所有者拥有。2、创建数据库注意事项创建数据库需要拥有CREATE D…

Mac上IntelliJ IDEA设置类注释和方法注释带作者和日期

在方法上标注注释 1:idea左上角点击Preferences 选择Editor------Code Style----Live Templates 点击右边号 点击Template Group,在弹框中添加一个分组 2:击Template Group,在弹框中添加一个分组 3:选中新建的分组,点击右边号,选择Live Template 4:在…

集群服务器分布式iis_Nginx+IIS分布式部署和负载均衡

标签:1.IIS中部署2个网站创建2个网站,端口分别为9001、90022.下载Nginx可以进入Nginx官网进行下载,官网地址: http://nginx.org/,需要下载windows版的3.Nginx安装3.1下载解压到D盘根目录下,打开conf目录下的…

超级计算机的英语作文80字,英语作文_为什么这台超级计算机如此快? (有声) _沪江英语...

Why Is This Supercomputer So Superfast?Cray employees put the finishing touches on Titan at the Department of Energys Oak Ridge National Laboratory in Tennessee. The supercomputer may be the worlds fastest. Its designed to do 20 petaflops — or 20,000 tri…

HDU 1251 统计难题(Trie模版题)

统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 34909 Accepted Submission(s): 13109 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现)…

SQLServer数据库收缩相关知识笔记

1、为什么要进行数据库收缩?SQL Server 数据库采取预先分配空间的方法来建立数据库的数据文件或者日志文件,比如数据文件的空间分配了300MB,而实际上只占用了20MB空间,这样就会造成磁盘存储空间的浪费。可以通过数据库收缩技术对数…

libvirt vnc花屏_centos6.5下VNC花屏解决方法

问题描述1、FusionCompute平台搭建完成后,创建基于RHEL6.5 64bit版本的虚拟机,完成虚拟机初始安装后,VNC界面出现花屏,无法登入Redhat桌面系统2、在创建虚拟机时,系统安装向导配置了网络,在花屏界面下可以通…

enum操作--获取枚举里的最大值

一个应用系统,如果程序里没有任何enum的使用,我认为它的可读性是有待商榷的。 求枚举里的最大/最小枚举值, 其实是对Array进行操作: enum EnumTest{ddd 2,eee} var arr1 Enum.GetValues(typeof(EnumTest)); //返回值是一个Array…

吕梁离石学校计算机专业在哪里,山西吕梁计算机大专学校有哪些太重技校告诉您...

山西吕梁计算机大专学校有哪些太重技校告诉您。选择专业的***关键的因素是你自身的兴趣,其他只能参考,如果你能准确的知道自己的兴趣所在,未来的职业所选,那么只需要一招就可以吃遍天。相信我,一生为自己感兴趣的事情奋…

网络安全:六种常见的网络攻击手段

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

3种团队分组适应项目_分组团队竞赛活动方案

为营造新年春节期间良好的经营氛围,形成规范有效的服务流程,促进员工快乐积极向上工作,铸造峡市娱乐行业名牌,经KTV 管理人员研究制定以下分组评比竞赛方案:第一:分组办法。1、KTV主管杨海军、华磊、冯磊、…

Spring Security(18)——Jsp标签

目录 1.1 authorize 1.2 authentication 1.3 accesscontrollist Spring Security也有对Jsp标签的支持的标签库。其中一共定义了三个标签:authorize、authentication和accesscontrollist。其中authentication标签是用来代表当前Authentication对象的&…

e4a html文本,E4A 怎么将剪贴版中的文本 粘贴到窗口的光标处啊?求个代码

满意答案百幻蝶V木桃2017.05.20采纳率:49% 等级:8已帮助:1710人■如何打开剪贴板查看器 当您从某个程序剪切或复制信息时,该信息会被移动到剪贴板并保留在那里,直到您清除剪贴板或者您剪切或复制了另一片信息。“剪…

电脑技巧:七款U盘修复软件

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

cdrx8如何批量导出jpg_Coreldraw/CDR X8 存低版本打开问题 – 数码打印破图 – Coreldraw/CDR软件崩溃 – 渐变导位图角度变了...

Coreldraw/CDR X8 存低版本打开问题 – 数码打印破图 – Coreldraw/CDR软件崩溃 – 渐变导位图角度变了Coreldraw/CDR X8 存低版本打开问题各位大神,小弟最近安装了Coreldraw/CDR X8 ,在设计文件时,会遇到给文字设计套白边,问题来…