Python中lst += 'a'与lst = lst + 'a'的差异及报错原因咨询
为什么
lst += 'a'能正常运行,而lst = lst + 'a'会报错? 这是个很典型的Python运算符行为差异问题,核心在于**+=和+对于列表这类可变序列的实现逻辑完全不同**,我们来拆解一下:
1. lst += 'a'的工作原理
当你对列表使用+=运算符时,Python实际调用的是列表的__iadd__(原地加法)方法。这个方法的设计是接受任意可迭代对象,而不仅仅是列表。
字符串'a'本身是可迭代的(它的迭代元素就是单个字符'a'),所以lst += 'a'等价于执行lst.extend('a')——它会把可迭代对象里的每个元素逐个添加到原列表中。
执行代码后,原本空的lst会变成:
print(lst) # 输出: ['a']
2. lst = lst + 'a'的问题所在
而+运算符调用的是列表的__add__方法,这个方法的规则要严格得多:它要求左右两侧的操作数必须是同类型的序列(都是列表),因为它的作用是拼接两个同类型序列并返回新的序列。
字符串'a'不是列表,所以Python会直接抛出类型错误,提示你“只能将列表与列表拼接,不能与字符串拼接”。如果想让这个操作合法,你需要把字符串包装成列表:
lst = lst + ['a'] # 这样就能正常运行,结果同样是['a']
一句话总结
+=(__iadd__):原地修改列表,支持传入任意可迭代对象,会把可迭代对象的元素逐个加入列表。+(__add__):返回新列表,要求两边必须都是列表类型,直接拼接两个列表。
内容的提问来源于stack exchange,提问作者Aniket_Mishra
相关产品推荐
相关产品推荐

