有人可以解释一下这种行为:
>>> 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 + b和a += b是不一样的东西.前者调用__add__1(并且进行常规赋值,不能重载),同时+=调用__iadd__(并且还进行常规赋值,但仅允许__add__在__iadd__未实现时返回).列表用不同的语义定义; __add__创建一个新列表并要求两个操作数都是列表,而__iadd__本质上是.extend()因为(1)适用于任何可迭代的,(2)就地改变列表.
1或者__radd__在某些情况下,但我对此表示赞赏,因为在这种情况下它并没有真正影响结果.
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |