理解 Python 中的链式赋值
Python 中的链式赋值,例如“x = y = somefunction()”这样的表达式,引发了人们的关注关于它们与多个顺序赋值的等价性的讨论(“x = somefunction(); y = somefunction()”)。为了澄清这个问题,让我们详细探讨一下链式赋值的操作。
在链式赋值中,首先分配最左边的目标。因此,“x = y = somefunction()”相当于:
temp = somefunction() x = temp y = temp
这个顺序至关重要,因为左侧的目标在分配给右侧的目标之前接收临时变量“temp”的值。这在链式赋值函数的反汇编中很明显:
>>> def chained_assignment(): ... x = y = some_function() ... >>> import dis >>> dis.dis(chained_assignment) 2 0 LOAD_GLOBAL 0 (some_function) 3 CALL_FUNCTION 0 6 DUP_TOP 7 STORE_FAST 0 (x) 10 STORE_FAST 1 (y) 13 LOAD_CONST 0 (None) 16 RETURN_VALUE
请注意,函数返回的值首先存储在“x”中,然后存储在“y”中。
这种理解对于理解链式赋值的行为至关重要。例如,应避免使用“x = y = []”这样的表达式,因为“x”和“y”都引用同一个列表。相反,支持单独的赋值,例如“x = []”和“y = []”来创建不同的列表。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3