为什么+ =运算符的工作方式与+不同,并为python字典赋值运算符?

Dhr*_*hak 7 python

有人可以解释一下这种行为:

>>> a = {'hello':'world' , 'good':'food'}
>>> b = [1,2]
>>> b = b + a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "dict") to list
>>> b += a
>>> b
[1, 2, 'good', 'hello'] <--- Why do the keys get added when dict cannot be added to a list
>>> 
Run Code Online (Sandbox Code Playgroud)

小智 5

因为a = a + ba += b是不一样的东西.前者调用__add__1(并且进行常规赋值,不能重载),同时+=调用__iadd__(并且还进行常规赋值,但仅允许__add____iadd__未实现时返回).列表用不同的语义定义; __add__创建一个新列表并要求两个操作数都是列表,而__iadd__本质上是.extend()因为(1)适用于任何可迭代的,(2)就地改变列表.

1或者__radd__在某些情况下,但我对此表示赞赏,因为在这种情况下它并没有真正影响结果.

  • "不要问为什么决定这样做." 这正是他正在做的事情. (3认同)

归档时间:

查看次数:

151 次

最近记录:

12 年,7 月 前