瞭解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中文網其他相關文章!