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

发布于 2021-01-29 18:34:13

这是一个代码片段。

x = {}
x[1] = len(x)

print x
{1: 0}

这个定义好吗?也就是说,可以x == {1: 1}代替吗?

因为我记得C ‘98中的等效程序(如果使用std::map)具有未定义的行为。用VS编译器和G 编译时,程序的输出是不同的。

关注者
0
被浏览
148
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    正如我在评论中提到的,该测试用例可以简化为:

    x = {}
    x[1] = len(x)
    

    那么问题就变成了x[1] == 0,或者是x[1] == 1

    让我们看一下相关的2.x文档3.x文档

    Python从左到右计算表达式。请注意,在评估分配时,右侧的评估先于左侧。

    在以下各行中,表达式将按其后缀的算术顺序求值:

    expr3, expr4 = expr1, expr2
    

    因此…

    len(x)将在我们执行之前进行完全计算x[1],因此x[1] == 0,这是定义明确的。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看