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

a + = b与a = a + b不同

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

a + = b与a = a + b不同

通常,这始终是可变性的问题,尤其是运算符重载。C ++并不更好。

该表达式

a +b
从绑定到
a
和的对象(
b
未修改)计算一个新列表。将其分配回时
a
,您将更改一个变量的绑定以指向新值。预计这
+
是对称的,因此您无法添加字典和列表。

该语句

a +=b
修改绑定到的现有列表
a
。由于它不会更改对象标识,因此更改对表示的对象的所有绑定都是可见的
a
。运算符
+=
显然不是对称的,它等效于
list.extend
,它在第二个操作数上进行迭代。对于字典,这意味着列出密钥。

讨论:

如果对象没有实现

+=
,则Python将使用
+
和将其转换为等效语句
=
。因此 有时是等效的, 具体取决于所涉及对象的类型。

+=
更改引用对象(与作为引用的操作数值相反)的a的好处是,在不相应增加实现复杂性的情况下,实现可以更高效。

在其他语言中,您可能会使用更明显的表示法。例如,在没有操作符重载的虚拟版本的Python中,您可能会看到:

a = concat(a, b)

a.extend(a, b)

操作符实际上只是这些的简写。

奖金:

也可以尝试其他可迭代对象。

>>> a = [1,2,3]>>> b = "abc">>> a + bTraceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: can only concatenate list (not "str") to list>>> a += b>>> a[1, 2, 3, 'a', 'b', 'c']

能够执行此操作很有用,因为您可以将生成器附加到带有的列表中

+=
并获取生成器内容。不幸的是,它破坏了与的兼容性
+
,但是很好。



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

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

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