Python中x=y=z的引擎盖下是什么?

2024-10-06 11:18:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中遇到了类似这样的东西,不知道如何理解这些代码:

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

Tags: key代码formfielddatavalsomesomedict
3条回答

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

x = (y = z)

z的值被赋值给y;这也是赋值的值。作为括号中表达式的值返回,然后将其赋值给x。你知道吗

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

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()

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

相关问题 更多 >