Python 中 + 和 += 赋值操作的性能比较

在这里插入图片描述

1. 问题背景

在 Python 中,我们可以通过 += 和 = … + 完成累加操作,在实际开发过程中我们一般会优先选择 +=,然而最近在对比 += 和 = … + 的性能时出现了 += 反而更慢的现象。因此,我们决定对此问题进行深入探讨。

2. 解决方案

为了准确地评估 += 和 = … + 的性能差异,我们编写了一个简单的测试脚本,封装了两个函数并使用 timeit 测试模块来测量它们的执行时间。

def testAccumPlusEqual():x = 0for i in range(100):x += 1return xdef testAccumEqualPlus():x = 0for i in range(100):x = x + 1return xif __name__ == '__main__':import timeitprint(timeit.repeat("testAccumPlusEqual()",setup="from __main__ import testAccumPlusEqual"))print(timeit.repeat("testAccumEqualPlus()",setup="from __main__ import testAccumEqualPlus"))

测试结果显示,在我们的测试环境下,= … + 比 += 的执行速度更快。为了进一步探究原因,我们使用 dis 模块来查看这两个函数的字节码:

>>> import dis
>>> dis.dis(testAccumEqualPlus)2           0 LOAD_CONST               1 (0)3 STORE_FAST               0 (x)3           6 SETUP_LOOP              30 (to 39)9 LOAD_GLOBAL              0 (range)12 LOAD_CONST               2 (100)15 CALL_FUNCTION            118 GET_ITER            >>   19 FOR_ITER                16 (to 38)22 STORE_FAST               1 (i)4          25 LOAD_FAST                0 (x)28 LOAD_CONST               3 (1)31 BINARY_ADD          32 STORE_FAST               0 (x)35 JUMP_ABSOLUTE           19>>   38 POP_BLOCK           5     >>   39 LOAD_FAST                0 (x)42 RETURN_VALUE        
>>> dis.dis(testAccumPlusEqual)2           0 LOAD_CONST               1 (0)3 STORE_FAST               0 (x)3           6 SETUP_LOOP              30 (to 39)9 LOAD_GLOBAL              0 (range)12 LOAD_CONST               2 (100)15 CALL_FUNCTION            118 GET_ITER            >>   19 FOR_ITER                16 (to 38)22 STORE_FAST               1 (i)4          25 LOAD_FAST                0 (x)28 LOAD_CONST               3 (1)31 INPLACE_ADD         32 STORE_FAST               0 (x)35 JUMP_ABSOLUTE           19>>   38 POP_BLOCK           5     >>   39 LOAD_FAST                0 (x)42 RETURN_VALUE

结果表明,+= 使用 INPLACE_ADD 指令,而 = … + 使用 BINARY_ADD 指令。两者之间的区别在于,INPLACE_ADD 会直接修改操作数的值,而 BINARY_ADD 则会创建一个新的对象。因此,+= 操作需要花费更多的时间来更新操作数的值。

综合以上分析,我们可以得出结论,在 Python 中,= … + 比 += 的执行速度更快,原因在于 += 使用 INPLACE_ADD 指令,直接修改操作数的值,而 = … + 使用 BINARY_ADD 指令,创建一个新的对象。

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

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

相关文章

C语言---贪吃蛇(一)---准备工作

文章目录 前言1.Win32 API介绍1.1.Win32 API1.2. 控制台程序1.3.控制台屏幕上的坐标[COORD](https://learn.microsoft.com/zh-cn/windows/console/coord-str)1.4.[GetStdHandle](https://learn.microsoft.com/zh-cn/windows/console/getstdhandle)1.5.[GetConsoleCursorInfo](h…

视频太大怎么压缩变小?8种方法随时压缩视频大小

视频太大怎么压缩变小?视频压缩方式分为两种,有损压缩和无损压缩,什么是有损什么是无损压缩,什么时候视频用无损压缩更好?什么时候用有损压缩更好?如何调整视频参数实现基本无损压缩? 今天就借助…

九章云极DataCanvas AIDC OS智算操作系统正式发布,开启AI智算新纪元

4月18日,2024九章云极DataCanvas智算操作系统新品发布会于北京隆重召开,全新产品DATACANVAS AIDC OS智算操作系统(以下简称AIDC OS)正式官宣。AIDC OS以卓越的AI技术实力和AI基础软件为根基,以重新定义和突破传统为创新…

我独自升级崛起在哪里下载 我独自升级崛起一键下载方法极速体验

我独自升级崛起在哪里下载 我独自升级崛起一键下载方法极速体验 最近在游戏圈内爆火的一款游戏《我独自升级:崛起》是一款由韩国漫画改编而成的热门多人网络在线联机游戏,这款游戏是一款的角色扮演游戏,游戏有着引人入胜的剧情模式。玩家们…

m4a转wav怎么转?3个简单的转换方法~

随着音频的迅猛发展,不同的音频文件格式应运而生,其中M4A和WAV都备受欢迎。M4A格式的兴起始于对音质和压缩效率的双重追求,而WAV则因其高保真特性而成为专业录音室的首选。 M4A格式的由来 M4A格式最初是由苹果公司引入的,旨在提供…

6、JVM-JVM调优工具与实战

前置启动程序 事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用 Jmap 此命令可以用来查看内存信息,实例个数以及占用内存大小 jmap -histo 14660 #查看历史生成的实例 jmap -histo:live 14660 #查看当前存活的实…

探索人工智能绘图的奇妙世界

探索人工智能绘图的奇妙世界 人工智能绘图的基本原理机器之美:AI绘图作品AI绘图对艺术创作的影响未来展望与挑战图书推荐👉AI绘画教程:Midjourney使用方法与技巧从入门到精通内容简介获取方式👉搜索之道:信息素养与终身…

CSS 实现视差滚动效果

一、是什么 视差滚动(Parallax Scrolling)是指多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验 我们可以把网页解刨成:背景层、内容层、悬浮层 当滚动鼠标滑轮的时候,各个图层以不…

启明云端ESP32-S3+车载桥接器案例,能实现对车载产品集控

最近房车旅行很盛行,谁不想五一自驾游开车去外面玩?为了能提升用户体验,车企房车智能化升级越来越普遍,接下来小启给大家讲一个案例,启明云端ESP32-S3车载桥接器,感兴趣的可以看看。 一、ESP32-S3车载桥接器…

分享4款免费ai绘画工具!

随着人工智能技术的飞速发展,AI绘画工具已经逐渐走入了我们的日常生活。这些工具不仅能够简化绘画过程,更能让普通人体验到艺术创作的乐趣。今天,我们就来盘点一下那些值得一试的免费AI绘画工具,看看它们如何让我们的创作欲望得到…

有效的括号 + 点击消除 || 匹配问题

目录 点击消除: 有效的括号: 点击消除: 点击消除_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/8d3643ec29654cf8908b5cf3a0479fd5?tpId308&tqId40462&ru/exam/oj 如题目所述, 示例1&#xf…

14-Error Handling (错误处理)

ESP32-S3错误处理:理解并掌握其重要性 在编程中,错误处理是一种重要的编程实践,它可以帮助我们的程序在遇到错误时能够优雅地恢复,而不是崩溃或产生不可预测的结果。在IDF中官方提供一些实用的错误处理技巧。👩‍&…

微信小程序酒店选择日期和入住人数(有效果图)

效果图 app.vue onLaunch:function(options){this.defaultcache()}defaultcache(){// 入住信息缓存var arr this.getDateTime();var ReserVation {reservType:0,//1 人数 2日期InCheckin:{},//入离日期peopleArr:[{title:成人,num:2},{title:儿童,num:0},{title:宝子,num:1…

第二部分 Python提高—GUI图形用户界面编程(六)

其他组件学习 文章目录 OptionMenu 选择项Scale 移动滑块颜色选择框文件对话框简单输入对话框通用消息框ttk 子模块控件 OptionMenu 选择项 OptionMenu(选择项)用来做多选一,选中的项在顶部显示。显示效果如下: from tkinter import * root Tk();ro…

【机器学习】分类与预测算法评价的方式介绍

一、引言 1、机器学习分类与预测算法的重要性 在数据驱动的时代,机器学习已经成为了处理和分析大规模数据的关键工具。分类与预测作为机器学习的两大核心任务,广泛应用于各个领域,如金融、医疗、电商等。分类算法能够对数据进行有效归类&…

【分治】Leetcode 库存管理 III

题目讲解 LCR 159. 库存管理 III 本题的含义就是让求出最小的k个数 算法讲解 class Solution { public:void my_qsort(vector<int>& nums, int l, int r){if(l > r) return ;int i l, left l-1, right r1;int key nums[rand() % (r - l 1) l];//完成分三…

uni-app项目引入阿里巴巴矢量图标库

uni-app项目引入阿里巴巴矢量图标库 1.下载图标库中的symbol下载至本地 2.解压文件夹并放入项目中 我这里放入的位置是src/static/icon目录下 3.修改文件指向路径为相对路径 即在路径iconfont前面添加斜杠 4.app.vue的style中引入 import static/icon/iconfont.css; 5…

(2022级)成都工业学院数据库原理及应用实验四: SQL简单查询

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 在实验三的基础上完成下列查询&#xff1a; 1、查询所有…

ComfyUI IPAdapter plus安装教程

ComfyUI是一个创新的Stable Diffusion AI绘图工具WebUI&#xff0c;它采用节点流程式设计&#xff0c;将Stable Diffusion的操作流程细分为多个节点&#xff0c;从而实现了更高精度的工作流定制与优秀的可复现性。相较于传统WebUI&#xff0c;ComfyUI不仅操作更为流畅&#xff…

在西非土地上播种希望

在西非这片广阔而充满活力的土地上播种希望&#xff0c;我们可以从多个维度进行解读和行动&#xff1a; 教育援助&#xff1a;投资于当地的教育事业&#xff0c;改善学校设施&#xff0c;提供教育资源&#xff0c;尤其是对女童教育的重视&#xff0c;让更多孩子有机会接受基础…