python关于+=的陷阱

【连接器专题】 EIA-364 系列标准的完整列表 EIA-364 系列标准在电子工业中具有重要的地位,为电子连接器和互连系统的测试和验证提供了统一的、可操作的流程和方法,有助于提高电子产品的质量和可靠性,促进了电子工业的发展 阅读详情

看下面代码

t = (1, 2, [30, 40])
t[2] += [50, 60]

我们知道tuple元组是个不可变元素,所以更改元组的元素道理上是不行的,但是我改变的元素是个列表,它本身是可变的,这样可行吗??

先别去控制台运行,猜是下面哪一种:

  1. t 变成 (1, 2, [30, 40, 50, 60])。
  2. 因为 tuple 不支持对它的元素赋值,所以会抛出 TypeError 异常。
  3. 以上两个都不是。
  4. a 和 b 都是对的。

\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\

\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
\
答案是第四种情况

我们使用Python Tutor(http://www.pythontutor.com)对执行代码进行可视化
在这里插入图片描述在这里插入图片描述
最后我们看看背后的字节码是怎么执行s[a] += b这种操作的
在这里插入图片描述到1是将 s[a] 的值存入 TOS(Top Of Stack,栈的顶端)
到2是计算 TOS += b。这一步能够完成,是因为 TOS 指向的是一个可变对象
到3是s[a] = TOS 赋值。这一步失败,是因为 s 是不可变的元组

所以才会出现即操作成功又报异常的现象

教训:

  1. 不要把可变对象放在元组里面
  2. 增量赋值不是一个原子操作(从字节码可以看出经过了若干步)
光学传播仿真软件:SPEOS_(14).建筑物内光环境仿真 在建筑物内光环境仿真中,材料属性的定义直接影响光的传播和反射效果。SPEOS提供了丰富的材料库,但也可以自定义材料属性以满足特定需求。创建新材料选择Materials->。输入材料名称和类型。配置材料属性选择材料对象,打开属性编辑器。设置反射率、透射率、表面粗糙度和颜色。# 导入SPEOS模块# 创建新材料# 配置材料属性custom_material.set_reflectivity(0.8) # 设置反射率为0.8。 阅读详情

相关推荐

fpga在线升级 linux_仅5000行Verilog代码、可在FPGA上跑轻量级Linux系统的RISC-V内核

本文发布于www.hackster.io,由东京理工大学的计算机学院开发,专用于教学与加速用(苏老师也一直认为这是RISC-V当前的主要方向)。目前市场上开源的RISC-V内核已经很多,但很少有公开的RISC-V计算系统是非常轻型且能跑Linux系统的。这一款RISC-V内核就可以运行在FPGA上,用Verilog编写的,需要很少硬件的资源就能跑起来,所以可以运行在一个低成本的FPGA上。来看一下...

weixin_34083807的博客 1867

Python中tuple+=赋值的四个问题

转自:http://shomy.top/2017/08/17/python-tuple-assign/ 最近偶尔翻看Fluent Python,遇到有意思的东西就记下来. 下面的是在PyCon2013上提出的一个关于tuple的Augmented Assignment也就是增量赋值的一个问题。 并且基于此问题, 又引申出3个变种问题. 问题 首先看第一个问题, 如下面的代码段: 1 2 >>> t = (1...

一苇以航 731

MIMO技术入门

MIMO:多天线技术,发射端和接收端有多个天线(注意:并不是指多个天线板,而是多套振子,每一套是一个独立的天线。) 4G:2、8天线 5G:4、64天线(64T64R) 手机也是多天线 MIMO实现效果的分类: 1)空间分集 。2)空间复用。3)波束赋形。 空间分集(space diversity) 作用:提升接收质量 利用多个天线发射或者接收一个数据流,避免单个信道衰落对整个链路的影响。(比如你的耳机坏了一只并不影响另一只) 空间复用(space multiplexing) 作用:提升速率 利

About1129的博客 2873

Python中的+=问题

面试题 — += += 运算符相对于整型或者字符串类型都是先相加再赋值(修改引用) 在python中,列表变量调用 += 本质上是在执行列表变量的 extend 方法,不会修改变量的引用 def demo(num, num_list): print("函数内部代码") # num = num + num num += num # num_list.extend(num_lis...

Yuudachi的博客 1565

QT+QTimer+QThread实现线程内的定时任务并且和主线程进行交互

在制作qt软件时,我们经常会用到qtimer定时器以及将其在非主线程中进行使用,甚至有的时候还需要和主线程进行交互。我总结了两种用法,仅供参考。以上即为QTimer和QThread联合使用的学习记录。

u011826081的博客 5685

AXI_IIC读写操作

其实在之前调试过一次AXI_IIC,没调试通,碍于赶进度,就直接使用了zynq-PS侧的IIC,就一直搁置着了,这次抽空将这部分内容继续调试下去,这一次没花多少时间就调通了,现在将我的调试过程,经历,以及参考文档如下: 参考文档:pg090-axi-iic.pdf 参考链接:https://forums.xilinx.com/t5/Design-and-Debug-Techniques-Blog/IIC-Protocol-and-Programming-Sequence/ba-p/1072248 上面的这个

qq_32134427的博客 1万+

Python中+=运算踩坑小记

+=是原地修改

weixin_46606785的博客 1143

黑猫带你学eMMC协议第14篇:eMMC FFU详解(Field Firmware Update)

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 1、ffu相关寄存器有哪些? 2、如何设置ffu? 3、什么是ffu?是否能够更新旧版本的固件到emmc? 4、ffu配置流程图。 2 什么是FFU 主机下载新的固件到eMMC,下载成功后eMMC将固件安装到设备。 3 相关寄存器/命令 SUPPORTED_MODES [493] FFU_FEATURES [492] 该

黑猫奥利奥的博客 4657

python 一个关于+=的 谜题

Leonardo Rochael 在 2013 年的 Python 巴西会议上提到这个谜题。 t 变成 (1, 2, [30, 40, 50, 60])。 同时因为 tuple 不支持对它的元素赋值,所以会抛出 TypeError 异常。 t[2] 被改动了,但是也有异常抛出。 如果写成 t[2].extend([50, 60]) 就能避免这个异常 可视化分析 查看其字节码 从中我们能学习到 ...

qq_15407209的博客 342

Python爬虫实战【房产刚需专属】:爬取链家/贝壳完整房源数据,精准筛选刚需房源【房价+户型+地段+面积+装修】

本次爬虫的核心亮点就是刚需专属筛选,我已经把刚需买房的主流筛选逻辑封装为独立函数,你只需要修改筛选参数,就能精准匹配你的需求无需懂Python语法,直接改数字/文字即可!本次爬虫是刚需买房+Python爬虫实战的完美结合。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1823

【学习系列】SAP RAP 1:关于RAP的一些基本介绍

摘要:SAP RAP和CAP是两种不同的开发模型。RAP(RESTful ABAP)用于在S/4HANA等ABAP平台上构建现代业务应用,基于CDS+OData,适合ABAP开发者扩展核心业务。CAP(云应用编程模型)是BTP上的云原生框架,支持Node.js/Java,适合构建跨系统集成应用。RAP优势在于与S/4HANA深度集成,CAP则更灵活,支持多云环境。选择依据主要取决于开发平台(S/4HANA或BTP)、技术栈(ABAP或Node.js/Java)及应用场景(核心扩展或云原生开发)。

DeveloperMrMeng的博客 1160

关于 Python 元组的不可变属性特例

元组可以被看做为不可变列表,也就是说元组的里的元素是不能随意改变的。但是,元组是可以接受一个可变对象——列表作为元素的。这会产生一些意想不到的边界效果。摘自《流畅的 Python》第 2.6 章节。 1 一个谜题 定义一个接受可变对象——列表作为元素的元组,然后利用切片操作列表对象。 >>> t = (1, 2 ,[ 30, 40]) >>&gt...

藕丝空间 1540

基于STM32设计的心率脉搏测量仪(项目资料ID:9)

本设计基于STM32F103单片机开发了一款便携式心率脉搏测量仪,通过光电传感器采集脉搏信号,经放大(约1200倍)、滤波(低通及四阶低通滤波)、比较及偏置电压调理后,由STM32进行ADC采样与数据处理。硬件采用Altium Designer设计,包含信号调理电路(限定心率范围43.4-800次/分钟)及电源管理模块;软件基于STM32CubeMX开发,利用队列存储和时间间隔平均算法优化精度,实现多终端显示(OLED实时心率/动画、MATLAB波形分析、蓝牙传输至手机)。系统支持自动启停(检测脉搏启

以培养嵌入式工程师为己任 1万+

十个Python陷阱(1-3)

这些陷阱不一定是语言的缺陷,然而,这些语言的副作用,常常会使新手绊倒,甚至是有经验的程序员也会中招。完全理解Python的一些核心行为,反而可能会使你陷入其中。 这边文章类似于一个对Python初学者的指导,早点了解这些陷阱,总比在实际项目的deadline前遭遇他们要好吧 :-)这不是在批评Python语言,就像前面说的,大部分的陷阱并不是由于语言的缺陷。 1. 不一致的缩进

Carl.Chen@seu@zju 1476

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python输入列表有缺陷_程序员老司机们都要错的Python陷阱与缺陷列表

我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇到过的“UnboundLocalError”, 示例:>>>a=1>>>deffunc():...a+=1...printa...>>>func()Tra...

weixin_39747075的博客 183

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python编程陷阱(二)

【代码】Python编程陷阱(2)

fasdfasfwerwqf的博客 243

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

程序员必知的 Python 陷阱与缺陷列表

我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇到过的“UnboundLocalError”, 示例: 加qq群813622576或vx:tanzhouyiwan即可获取大量Python视频教程以及各类PDF! 对于“UnboundLocalError”,还有更高级的版本:...

sxyyu1的博客 446

初涉Python组

a = a+a 与 a+=a 的区别: a = [100] def test (num): num = num + num print (num) test (a) print(a) 运行结果: [100, 100] [100] 对比: a = [100] def test (num): num += num print (num) test (a) print(a) 运行结果...

Deam_swan_goose的博客 285

坑爹的Python陷阱

毫无疑问的说,python是非常容易上手,也非常强大的一门语言。python非常灵活,可定制化很强。同时,也存在一些陷阱,搞清楚这些陷阱能够更好的掌握、使用这么语言。本文列举了一些python中的一些缺陷,这是一份不完全列表,欢迎大家补充。

AI大模型资料分享员 432

python从键盘输入列表有缺陷_程序员老司机都要错的Python陷阱与缺陷列表

摘自http://www.51testing.com/html/49/n-3721849.html我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇到过的“UnboundLocalError”, 示例:>>> a=1>>> def func():......

weixin_39768247的博客 153

python中+=操作符

今天用for结构,比如: for i in 'hello':   tmp += i 有错,a+= x即为a = a + x,该表达式成立的前提之一为a要首先存在,

falu的专栏 725

python a += 和 a = a + 真的相同吗?

a += b 和 a = + b真的相同吗? 举个例子 a = 5 b = a b += 5 print(a, b) 结果 a, b 10, 10 看到结果你,会不会想打死博主,你怎么回事? 不要急,再给你举个例子 a = [1, 2] b = a b += [3, 4] print(a, b) b = b + [5, 6] print(a, b) 结果 a, b [1, 2, 3, 4], [1, 2, 3, 4] a, b [1, 2, 3, 4], [1, 2, 3, 4, 5,

frighting_ing的博客 392

Python列表+=操作遇到的那些诡异瞬间

"为什么这个列表合并操作突然抛出了TypeError?我明明上周刚跑通这段代码!"深夜的办公室里,我盯着一个看似简单的操作百思不得其解——直到发现list_b其实是个NumPy数组。这让我想起这些年被+=操作符坑过的无数个深夜,今天就来扒一扒那些看似简单却暗藏杀机的瞬间。

学IT,找陈寒 186

资深程序员总结出的 Python十个陷阱与缺陷列表,大部分人都遇到过的问题

我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你"想当然""的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。 比如,Python程序员应该都遇到过的"UnboundLocalError", 示例: 对于"UnboundLocalError",还有更高级的版本: 可能对于很多python新手来说,这个Error让人摸不着头脑。但我认为这不算陷阱,因为这段代码一...

sxyyu1的博客 1392

python del函数_程序员老司机都要错的 Python 陷阱与缺陷列表

源/马哥Linux运维文/xybaby我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇到过的“UnboundLocalError”, 示例:>>> a=1>>> def func():... a+=1......

weixin_39998795的博客 209

python 如何输入列表有缺陷,程序员必知的 Python 陷阱与缺陷列表

内容来源:作者——xybaby,链接,www.cnblogs.com/xybaby/p/7183854.html阅读字数:3754| 10分钟阅读我个人对陷阱的定义是这样的:代码看起来可以工作,但不是以你“想当然“”的方式。如果一段代码直接出错,抛出了异常,我不认为这是陷阱。比如,Python程序员应该都遇到过的“UnboundLocalError”, 示例:>>>a=1&g...

weixin_36301989的博客 192
上一篇: python对序列使用*的陷阱
下一篇: 视频详解CRNN(框架+代码+CTC理论)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值