变量与值的处理差异:列表变量与字面量的+=操作表现不同
为什么列表变量用+=字典正常,而列表字面量[] +=字典会报错?
先拆解两种场景的核心差异:
1. 变量a += 字典能运行的原因
当你执行a = []后,a是绑定了列表对象的变量。a += {'b':2, 'c':3, 'd':4}本质是调用列表的__iadd__方法——这个方法的作用是原地扩展列表,要求右侧是可迭代对象。
Python里字典默认的迭代对象是它的键,所以{'b':2, 'c':3, 'd':4}会被当成['b','c','d']这个序列处理,最终列表a被扩展为包含这些键的新列表,输出结果就是['b', 'c', 'd']。
如果你的需求是把整个字典作为单个元素添加到列表,应该用a.append({'b':2, 'c':3, 'd':4}),而非+=。
2. 列表字面量[] += 字典报错的原因
这是Python的语法规则限制:增强赋值(比如+=、-=、*=等)的左操作数必须是一个左值(lvalue)——也就是可被赋值、修改的对象,比如变量、列表下标项(lst[0])、对象属性(obj.attr)等。
而[]是临时创建的匿名列表字面量,没有绑定到任何变量,不属于可被赋值的左值范畴。Python语法直接禁止对字面量执行增强赋值,因为修改临时对象后无法再引用它,操作没有实际意义,因此会抛出SyntaxError: 'list' is an illegal expression for augmented assignment。
内容的提问来源于stack exchange,提问作者shayan bahrainy
相关产品推荐
相关产品推荐

