作业的右侧是否总是在作业之前评估?

2024-03-17

这是一个代码片段。

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(使用前将#替换为@)

作业的右侧是否总是在作业之前评估? 的相关文章

随机推荐