在Python中x = y = z的含义是什么?

时间:2018-08-06 22:13:39

标签: python

我在python中遇到了类似的情况,不确定如何理解此代码:

somedict['some_key'] = some_val = form.some_field.data

3 个答案:

答案 0 :(得分:5)

x = y = z等效于x = z; y = z(是,按此顺序),只是z仅被评估一次。

或者,就Python“编译”代码而言:

>>> compiled_code = compile("x = y = z", filename='con', mode='single')
>>> import dis
>>> dis.dis(compiled_code)
  1           0 LOAD_NAME                0 (z)
              2 DUP_TOP
              4 STORE_NAME               1 (x)
              6 STORE_NAME               2 (y)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE

答案 1 :(得分:1)

somedict['some_key'] = some_val = form.some_field.data

这与以下内容相同:

some_val = form.some_field.data
somedict['some_key'] = some_val

顺序通常并不重要,因为只有右边的一个可以是不可分配的,例如方法调用,lambda调用,关键字等...

我在实践中看到的一些地方是这样的:

new, assigned, complete = all_modes = "new assigned complete".split()

答案 2 :(得分:1)

对于某些语义上下文,赋值语句包含一个值,该值是分配给等号左侧变量的值。在这个比喻中,您可以将其视为

x = (y = z)

z的值分配给y;这也是赋值。 那个作为括号中的表达式的值返回,然后将其分配给x

实际上,编译器只是将值保留在寄存器中,然后执行第二次“存储”操作。