首頁 > 後端開發 > Python教學 > 為什麼 Python 2 的列表解析會在其範圍之外重新綁定名稱?

為什麼 Python 2 的列表解析會在其範圍之外重新綁定名稱?

Patricia Arquette
發布: 2024-11-29 12:41:10
原創
347 人瀏覽過

Why Does Python 2's List Comprehension Rebind Names Outside Its Scope?

列表推導式的意外行為:反彈名稱和模糊範圍

Python 的列表推導式提供了一種簡潔且便捷的方式來創建列表,但它們有一個隱藏的陷阱:重新綁定名稱甚至超出了理解本身的範圍。在 Python 2 中,這種奇特的行為是令人沮喪和程式錯誤的根源。

考慮以下程式碼:

x = "original value"
squares = [x**2 for x in range(5)]
print(x)  # Prints 4 in Python 2!
登入後複製

在Python 2 中,執行此程式碼將意外地列印4 而不是「原值。」這是因為清單推導式將循環控制變數x洩漏到周圍的作用域中,覆蓋其原始值。

此行為源自於列表推導式在 Python 2 中的實作方式:作為提高效率的最佳化。然而,這一直是 Python 程式設計師的一個重大痛點,導致錯誤和混亂。

值得慶幸的是,在 Python 3 中,這個「骯髒的小秘密」被消除了。列表推導式現在採用與生成器表達式相同的實作策略,即使用單獨的執行框架。因此,在 Python 3 中,上面的程式碼片段按照預期正確列印了“原始值”,因為推導式中的 x 不會掩蓋周圍範圍中的 x。

Guido van Rossum,Python 的創建者,解釋了此更改背後的原因:

“[我們進行此更改]通過使用與以下相同的實現策略來修復列表理解的“骯髒的小秘密」生成器表達式。」

Python 3 中的這種改進行為證明了Python語言的持續開發和完善,確保了清單理解使用的清晰度和可預測性。

以上是為什麼 Python 2 的列表解析會在其範圍之外重新綁定名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板