python – 赋值的右侧是否总是在赋值之前进行求值?
作者:互联网
这是一段代码片段.
x = {}
x[1] = len(x)
print x
{1: 0}
这个定义得很好吗?也就是说,x == {1:1}可以吗?
因为我记得C ’98中的等效程序(如果我们使用std :: map)具有未定义的行为.使用VS编译器和G编译时,程序的输出是不同的.
解决方法:
正如我在评论中提到的,这个测试用例可以简化为:
x = {}
x[1] = len(x)
那么问题是,x [1] == 0,还是x [1] == 1?
让我们看看相关的2.x documentation和3.x documentation:
Python evaluates expressions from left to right. Notice that while evaluating an assignment, the right-hand side is evaluated before the left-hand side.
In the following lines, expressions will be evaluated in the arithmetic order of their suffixes:
06001
因此…
len(x)将在我们执行x [1]之前完全计算,因此x [1] == 0并且这是明确定义的.
标签:python,undefined-behavior,python-2-7,order-of-evaluation 来源: https://codeday.me/bug/20190725/1529267.html