理解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