理解globals()、locals() 和vars() 之間的區別
在Python 中,globals()、locals( ) 、 和vars() 是提供對目前程式的命名空間的洞察的函數。讓我們探討它們的差異:
globals()
-
用途:傳回全域命名空間的字典。
-
行為:一致,總是傳回目前模組的命名空間字典。
locals()
-
用途:取得表示目前命名空間的字典。
-
行為:動態,取決於呼叫者的上下文。
-
函數內部:傳回包含目前局部變數和任何閉包變數的字典。由於與幀物件的 f_locals 屬性關聯,同一堆堆疊框架內的多個呼叫會傳回相同的字典。對此字典的更新會反映在本地命名空間中,但直接向字典賦值並不會修改對應的本地變數。
-
函數外部:傳回充當字典的實際字典目前命名空間。對此字典的變更與命名空間同步,反之亦然。
vars()
-
用途:接受一個物件作為參數,並傳回該物件的dic 屬性。
-
行為:
- 不帶參數,它傳回目前命名空間的dict(類似函數外部的locals ())。
- 當提供一個物件時,它會檢索該物件的 __dict__,通常包含其屬性資料。
- 對傳回的字典的更新會影響物件的屬性,反之,物件屬性的變更會反映在字典中。
重點說明:
locals() 和 vars() 的行為可能會因 Python 版本和實作而異。在 CPython 2.x 中,locals() 可以透過使用「exec 'pass'」以不同的方式運作。
以上是Python 中的 `globals()`、`locals()` 和 `vars()` 有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!