理解 Python 中的链式赋值
Python 中的链式赋值(例如“x = y = somefunction()”等表达式)引发了人们的关注关于它们与多个顺序赋值的等价性的讨论(“x = somefunction(); y = somefunction()”)。为了弄清楚这个问题,让我们详细探讨一下链式赋值的操作。
在链式赋值中,最左边的目标首先被赋值。因此,“x = y = somefunction()”相当于:
temp = somefunction() x = temp y = temp
这个顺序至关重要,因为左边的目标在分配给临时变量“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 = []”来创建不同的列表。
以上是Python 中的链式赋值如何工作?它们真的相当于多个顺序分配吗?的详细内容。更多信息请关注PHP中文网其他相关文章!