关于python:扩展奇怪行为的列表

List extending strange behaviour

本问题已经有最佳答案,请猛点这里访问。

在python(2.7)中发现了以前从未提到的有趣的东西。

这是:

1
2
a = []
a +="a"

是否有效,结果是:

1
2
>>> a
>>> ["a"]

但是

1
2
a = []
a = a +"a"

给予

1
>>> TypeError: can only concatenate list (not"str") to list

有人能解释为什么吗?谢谢你的回答。


distinguishes +和Python之间的运营商和提供单独的+=这些__add____iadd__钩;。。。。。。。简单的实现提供了list()型不同的是后者。

这是一个更有效的实施,这是__add__分别列表;列表返回到完全新的蛛网膜下腔出血(SAH),而只是扩展CAN __iadd__selfself然后返回。

在C代码实现,这是由__iadd__list_inplace_concat()listextend(),简单的调用,或,在Python代码,[].extend()。后者以任何顺序,通过设计。

在其他的__add__手法,用list_concat仅代表在C的输入,以list效率的缘故,可能是直接的;它可以在阵列内的C环和复制到新项目的名单上。

在结论,原因是因为当__iadd__接受任何肽序列(203)是实现增强的建议),这是在列表的.extend()简只是重用的方法。


如果a是一个列表,如果是一只xa + x作品也a += x作品名单,而任何x迭代变量。

以下可能帮助理解它:

1
2
3
4
5
6
In [4]: a = []

In [5]: a +="abc"

In [6]: a
Out[6]: ['a', 'b', 'c']

最关键的是,"a""abc"为迭代变量,这就是使他们的使用在+=右手侧。

这是不是因为工作需要operands +后者都是相同的类型(见说明书)。

写的东西,用你的+,扩大迭代变量:

1
2
3
4
5
6
In [7]: a = []

In [8]: a = a + list("abc")

In [9]: a
Out[9]: ['a', 'b', 'c']

在其他的话,是更一般比+=+当应用到列表中。