为何Python中执行i=3,b=5并行变量初始化会报字面量赋值错误?
为什么Python里
i=3,b=5会报错,而Java/C++可以? 哈哈,这个问题本质上是Python和Java/C++在赋值语法逻辑上的差异导致的,我来给你讲明白~
先看Java/C++的逻辑
在Java或者C++里,类似int i=3, b=5;的写法是完全合法的:
- 这里的逗号是变量声明的分隔符,本质上等价于把两个变量的声明拆成两行:
int i=3; int b=5;。编译器会把它识别为“同时定义两个变量,并分别赋值”,逗号只是用来简化写法的语法糖。
再看Python的解析逻辑
而在Python里,你写i=3,b=5的时候,解析器的理解和你想的完全不一样:
- Python里的逗号默认是用来创建元组的,而且赋值操作的优先级比逗号低,所以这句会被解析成
i = (3, b=5)。 - 这里的
b=5会被当成关键字参数表达式,但元组里根本不支持这种写法,不过更关键的是——如果你是想并行初始化两个变量,Python的正确姿势是并行赋值:i, b = 3, 5。
那你收到的「can't assign to literals」错误是怎么回事?大概率是你不小心写反了赋值顺序,比如写成了3=i,5=b:
- Python里规定,赋值语句的左边必须是可赋值的对象(也就是“左值”),而字面量(比如3、5这种固定值)是不可被赋值的,所以试图给3或5赋值的操作直接触发了这个错误。
补充:Python的并行赋值原理
Python的i, b = 3, 5是真正的并行赋值:
- 右边先创建一个元组
(3, 5),然后Python会把元组里的元素依次解包,分别赋值给左边的i和b,这才是Python中同时初始化多个变量的正确方式。
内容的提问来源于stack exchange,提问作者amruth polavarapu
相关产品推荐
相关产品推荐

