非常基本的问题,但我想我错过了一些我想了解的背景知识.
假设我们有表达式:
# 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"的类型是列表.问题是为什么在第一种情况下,最正确的值的类型传播到左边?
与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.
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |