Python区分
+和
+=运算符,并为它们提供了单独的挂钩。
__add__和
__iadd__。该
list()类型只是为后者提供了不同的实现。
列表分别实现这些功能更为有效;
__add__必须返回一个全新的列表,而
__iadd__可以扩展
self然后返回
self。
在C代码中,
__iadd__是由所实现的
list_inplace_concat(),该只需调用
listextend(),或者在python代码中,由
[].extend()。后者根据设计可以采用
任何 顺序。
__add__另一方面,用C表示的方法
list_concat仅将a
list作为输入,可能是出于效率考虑。它可以直接在内部C数组上循环,并将项目复制到新列表中。
总之,
__iadd__接受任何顺序的原因是因为在实施PEP
203(增强添加提案)时,对于列表而言,重用该
.extend()方法最简单。



