【发布时间】:2012-01-09 12:04:07
【问题描述】:
>>> b = []
>>> c = '1234'
>>> b += c
>>> b
['1', '2', '3', '4']
>>>
这里发生了什么?这应该行不通,对吧?还是我遗漏了一些明显的东西?
>>> b = []
>>> c = '1234'
>>> b + c
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
b + c
TypeError: can only concatenate list (not "str") to list
>>>
那么a += b 并不总是等同于a = a + b?
【问题讨论】:
-
这种行为是否仍然存在于 Python 3.x 中?我总是觉得令人恼火的是,标准库类型违反了
a += ba = a + b的一般合同(不影响对原始a值的任何其他引用)。 -
@Karl Knechtel:不幸的是,它仍然存在于 Python 3.2.1 中。
-
我在 python 3.2 中检查它,是的。我在查看产生错误结果的初学者代码时发现了这个问题。我在
Learning Python中找不到对这种特定行为的任何引用。我检查了 PEP203,它说使用了__iadd__,但他们也说__iadd__是就地__add__,在这种情况下并非如此......也许有人可以解释这种行为或点/链接下的理性对此进行一些讨论?我从卡尔的评论中了解到有人对此表示关注
标签: python string list augmented-assignment