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

Susan Sarandon
發布: 2024-10-28 03:07:31
原創
1004 人瀏覽過

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」之前接收到臨時變數「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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!