内容简介:大家经常在一些博客中看到这样的说法:等价于这种说法实际上并不准确。
大家经常在一些博客中看到这样的说法:
a += 1 复制代码
等价于
a = a + 1 复制代码
这种说法实际上并不准确。
我们来看一个例子:
>>> a = [1, 2, 3] >>> a += (4,) >>> a [1, 2, 3, 4] >>> a = [1, 2, 3] >>> a = a + (4,) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "tuple") to list 复制代码
这里报错了,说明 a += b
和 a = a + b
并不是完全等价的。
实际上,这是由于 +=
会首先调用左边这个对象的 __iadd__
方法,如果没有 __iadd__
方法,就会调用 __add__
方法。但是如果直接使用 +
号,就会直接调用 __add__
方法。而对于字符串、数字、浮点数这种不可变对象,他们没有 __iadd__
方法,所以对他们来说, a += b
与 a = a + b
是等价的。
但是列表是一个可变的容器,它内部是有 __iadd__
这个方法。对于列表来说,它的 __iadd__
方法的原型如下:
def __iadd__(self, values): self.extend(values) return self 复制代码
这一段代码你可以在这里看到: github.com/python/cpyt…
所以说,当你使用 +=
连接列表和元组的时候,本质上是列表使用 extend
把元组的内容添加进去。这样是不会报错的:
>>> a = [1, 2, 3] >>> a.extend((4,)) >>> a [1, 2, 3, 4] 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- P1003 等价表达式
- Python列表推导式一则:等价类划分
- 数据中心网络等价多路径ECMP技术
- 正则表达式 \D 元字符(等价于"[^0-9]")
- D中C#`readonly`关键字的等价物?
- 技术盛宴 | 数据中心网络等价多路径(ECMP)技术应用研究
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design Accessible Web Sites
Jeremy Sydik / Pragmatic Bookshelf / 2007-11-05 / USD 34.95
It's not a one-browser web anymore. You need to reach audiences that use cell phones, PDAs, game consoles, or other "alternative" browsers, as well as users with disabilities. Legal requirements for a......一起来看看 《Design Accessible Web Sites》 这本书的介绍吧!