栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-为什么+ =在列表上表现异常?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-为什么+ =在列表上表现异常?

一般的答案是+=尝试调用

__iadd__
特殊方法,如果该方法不可用,它将尝试使用
__add__
替代方法。因此,问题在于这些特殊方法之间的差异。

__iadd__
特殊方法是就地此外,这是它发生变异,它作用于对象。该
__add__
特殊方法返回一个新的对象,也可用于标准+操作。

因此,当在+=已

__iadd__
定义的对象上使用运算符时,该对象将被修改。否则,它将尝试使用纯文本
__add__
并返回一个新对象。

这就是为什么对于诸如列表之类的可变类型会+=更改对象的值,而对于诸如元组,字符串和整数之类的不可变类型则会返回一个新对象(

a += b等于a = a + b
)的原因。

对于类型的同时支持

__iadd__
,并
__add__
因此你必须要小心你使用哪一个。
a += b
将调用
__iadd__
和变异
a
,而
a = a + b
将创建一个新对象并将其分配给
a
。他们是不一样的操作!

>>> a1 = a2 = [1, 2]>>> b1 = b2 = [1, 2]>>> a1 += [3]          # Uses __iadd__, modifies a1 in-place>>> b1 = b1 + [3]      # Uses __add__, creates new list, assigns it to b1>>> a2[1, 2, 3]   # a1 and a2 are still the same list>>> b2[1, 2]      # whereas only b1 was changed

对于不可变的类型(没有

__iadd__
a += b,a = a + b
它们是等效的。这就是让你+=在不可变类型上使用的原因,这似乎是一个奇怪的设计决定,除非你考虑到否则无法+=在数字等不可变类型上使用!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391424.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号