7

誰かがこの動作を説明できますか:

>>> 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
>>> 
4

1 に答える 1

5

a = a + ba += bは同じものではないからです。前者は__add__1を呼び出します (そして、オーバーロードできない通常の代入を行います)、while+=は呼び出します(また、通常の代入を行いますが、実装されていない場合に__iadd__フォールバックできるようにするためだけです)。リストは、異なるセマンティクスで両方を定義します。新しいリストを作成し、両方のオペランドがリストである必要がありますが、本質的には、(1) 任意の iterable で機能し、(2) リストをその場で変更します。__add____iadd____add____iadd__.extend()

1または__radd__場合によっては、この場合の結果に実際には影響しないため、私はそれについて詳しく説明しています。

于 2013-10-16T09:19:55.953 に答える