运算符'='如何在表达式a = [x,y,z] ="123"中真正起作用?

pmo*_*niq 2 python

非常基本的问题,但我想我错过了一些我想了解的背景知识.

假设我们有表达式:

# version 1
a = [x,y,z] = "123"

#version 2
[x,y,z] = "123"
a = [x,y,z]
Run Code Online (Sandbox Code Playgroud)

我知道第一个版本是一个混乱的代码,但我希望了解.我一直认为这段代码的结果是一样的.我错了.第一个"a"的类型是字符串,第二个"a"的类型是列表.问题是为什么在第一种情况下,最正确的值的类型传播到左边?

use*_*ica 5

与C不同,=不是运算符和声明

a = [x,y,z] = "123"
Run Code Online (Sandbox Code Playgroud)

未被解析为a = ([x,y,z] = "123").它不会获取[x,y,z] = "123"赋值的结果并将其赋值给a.

Python中赋值语句的语法是

assignment_stmt ::=  (target_list "=")+ (starred_expression | yield_expression)
Run Code Online (Sandbox Code Playgroud)

并且,如文件中所述,

赋值语句计算表达式列表(请记住,这可以是单个表达式或以逗号分隔的列表,后者产生元组)并从左到右将单个结果对象分配给每个目标列表.

"123"被分配给两者,a并从[x,y,z],开始a.

  • @AntonvBR:不会.它会将`"123"分配给`[x,y,z]`,然后它会将`"123"分配给`a`. (2认同)