」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Python 中的鍊式賦值如何運作?它們真的相當於多個順序分配嗎?

Python 中的鍊式賦值如何運作?它們真的相當於多個順序分配嗎?

發佈於2024-11-08
瀏覽:590

How do chained assignments work in Python? Are they truly equivalent to multiple sequential assignments?

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