我在python中遇到了类似的情况,不确定如何理解此代码:
somedict['some_key'] = some_val = form.some_field.data
答案 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
。
实际上,编译器只是将值保留在寄存器中,然后执行第二次“存储”操作。