剖析globals()、locals() 與vars() 之間的差異
在Python 的命名空間操作領域內,存在三個基本函數:globals()、locals() 和vars()。這些函數中的每一個都傳回字典,但潛在的差異值得仔細檢查。
globals()
一致地,globals()傳回一個表示名稱空間的字典目前模組。該字典包含該模組中定義的所有全域變數、函數和類別。
locals()
與 globals() 不同,locals() 表現出動態行為。當在函數中呼叫時,它會傳回一個包含當前局部變數的字典,包括來自閉包變數的變數。然而,這個字典只是一個臨時快照。只有呼叫 locals() 或存取目前堆疊框架的 f_locals 屬性才會觸發其內容的更新。對 locals() 字典或其對應變數的賦值不會交叉更新。
vars()
Vars() 也傳回一個字典,但它的多功能性擴展到模組和函數名稱空間之外。當不帶參數呼叫時,vars() 的作用與 locals() 類似,傳回目前命名空間的字典。但是,當物件作為參數傳遞時,vars() 會深入研究該物件的 dict 以檢索其屬性。
更新和效果
locals() 和 vars() 都不會自動使它們的字典隨著命名空間的更改而保持最新。變數的賦值不會更新字典,相反,對字典的變更不會傳播到變數。但是,如果存取 f_locals(在 locals() 的情況下)或存取物件的 dict(在 vars() 的情況下),則字典可能會更新。
在總之,globals()、locals() 和 vars() 提供了三個用於在 Python 中操作名稱空間的工具。了解它們的差異使開發人員能夠精確且控制地瀏覽 Python 的執行環境。
以上是Python 中的 globals()、locals() 和 vars() 之間的主要區別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!