前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >只是为了少写代码?增强赋值没有那么简单!

只是为了少写代码?增强赋值没有那么简单!

作者头像
编程文青李狗蛋
发布2019-11-20 15:31:52
3680
发布2019-11-20 15:31:52
举报

在 Python 中存在二元表达式 + 赋值语句的组合,就像下面这样:

代码语言:javascript
复制
a += b

相信但凡是写过 Python 的都用过,格式大多都只是简写,这种形式的被称为增强赋值语句,这是 Python 从 C 语言抄,阿不,借鉴过来的...

在大多数人的观念里,这么简单的东西你还说个锤子.隔壁家的狗子都会用。我不否认很多人会用,在很多人只是把它简单的当作一种简便写法,写代码的时候少可以写几个字母,但其实这只是它其中最微不足道的一个优点,增强赋值绝没有这么简单!

0x00 执行更快

为什么执行速度更快呢,我们来看,传统的赋值语句的形式是这样的 "a = a + b",在这种形式中,a 出现了 2 次,所以必须要执行 2 次;但是在增强赋值语句中,"a += b" 中 a 只出现了 1 次,所以只需要执行 1 次即可,所以执行速度更快。

0x01 自动执行修改运算

在执行运算的时候,增强赋值会自动执行原处的修改运算,而不是传统形式的 copy 形式,这个可能有点难理解,不慌,有我...

我们来想一下列表,列表增加元素的方式有很多,比如在列表末尾增加一个新的元素:

如果要在末尾新增一组数据:

在上面的两种情况,其实合并对共享对象引用产生的副作用会更小,但是它的运行速度更慢。合并必须创建一个新的对象,把左侧的复制到列表中,然后再把右侧的复制到列表中。相比而言,在原处方法调用直接在一个内存块末尾添加项。

当然了,在我们使用增强赋值语句来扩展列表的时候,可以忘记这些细节。

0x02 共享引用

为什么要在这提到共享引用呢?“+=” 包含着对列表是进行原处修改的意思,而 "+" 是合并,总是生成新的对象。就所有的共享引用的情况而言,只有其他变量名引用的对象被修改,其中的差别才可能体现出来,比如像下面这个例子:

这个只是对列表、字典等可变对象才有用,而且这种情况比较罕见

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档