Kos*_*nov 3 python operator-precedence undefined-behavior python-2.7
这是一段代码片段.
x = {}
x[1] = len(x)
print x
{1: 0}
Run Code Online (Sandbox Code Playgroud)
这个定义得很好吗?也就是说,可以x == {1: 1}
呢?
因为我记得C++ '98中的等效程序(如果我们使用std::map
)具有未定义的行为.使用VS编译器和G ++编译时,程序的输出是不同的.
正如我在评论中提到的,这个测试用例可以简化为:
x = {}
x[1] = len(x)
Run Code Online (Sandbox Code Playgroud)
那么问题就变成了,是x[1] == 0
,或者是x[1] == 1
?
Python从左到右评估表达式.请注意,在评估分配时,右侧在左侧之前进行评估.
在以下行中,表达式将按其后缀的算术顺序进行计算:
Run Code Online (Sandbox Code Playgroud)expr3, expr4 = expr1, expr2
len(x)
在我们做之前将完全计算x[1]
,所以x[1] == 0
这是明确定义的.
归档时间: |
|
查看次数: |
290 次 |
最近记录: |