这是一个代码片段。
x = {} x[1] = len(x) print x {1: 0}
这个定义好吗?也就是说,可以x == {1: 1}代替吗?
x == {1: 1}
因为我记得C ‘98中的等效程序(如果使用std::map)具有未定义的行为。用VS编译器和G 编译时,程序的输出是不同的。
std::map
正如我在评论中提到的,该测试用例可以简化为:
x = {} x[1] = len(x)
那么问题就变成了x[1] == 0,或者是x[1] == 1?
x[1] == 0
x[1] == 1
让我们看一下相关的2.x文档和3.x文档:
Python从左到右计算表达式。请注意,在评估分配时,右侧的评估先于左侧。 在以下各行中,表达式将按其后缀的算术顺序求值: expr3, expr4 = expr1, expr2
Python从左到右计算表达式。请注意,在评估分配时,右侧的评估先于左侧。
在以下各行中,表达式将按其后缀的算术顺序求值:
expr3, expr4 = expr1, expr2
len(x)将在我们执行之前进行完全计算x[1],因此x[1] == 0,这是定义明确的。
len(x)
x[1]