List extending strange behaviour
在python(2.7)中发现了以前从未提到的有趣的东西。
这是:
是否有效,结果是:
但是
给予
1
| >>> TypeError: can only concatenate list (not"str") to list |
有人能解释为什么吗?谢谢你的回答。
- 即使是不同的操作+和+=if they do the same to似乎在许多情况。
- +=extend()类behaves python lists(inplace add and the other one is called)二进制文件。
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'] |
在其他的话,是更一般比+=+当应用到列表中。
- 问题是关于lst += iterable和lst + iterable之间的区别。
- 但它并不能解释为什么不能连接列表和iterable。
- @马蒂:当然。查看最新答案。