这是一个代码片段。
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
, or is x[1] == 1
?
我们来看看相关的2.x 文档 https://docs.python.org/2/reference/expressions.html#evaluation-order and 3.x 文档 https://docs.python.org/3/reference/expressions.html#evaluation-order:
Python 从左到右计算表达式。请注意,在评估作业时,首先评估右侧,然后评估左侧。
在下面的行中,表达式将按照其后缀的算术顺序进行计算:
expr3, expr4 = expr1, expr2
所以...
len(x)
将在我们之前完全计算x[1]
, so x[1] == 0
这是明确定义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)