首頁  >  文章  >  後端開發  >  在 Python 中,「globals()」、「locals()」和「vars()」對命名空間的存取有何不同?

在 Python 中,「globals()」、「locals()」和「vars()」對命名空間的存取有何不同?

Linda Hamilton
Linda Hamilton原創
2024-11-14 09:18:02463瀏覽

How Do `globals()`, `locals()`, and `vars()` Differ in Their Access to Namespaces in Python?

理解globals()、locals() 和vars() 函數之間的區別

在Python 中,globals()、locals ( ) 和vars() 在存取命名空間及其內容方面發揮著至關重要的作用。

globals() 總是傳回表示目前模組的命名空間的字典。每次調用它時,它都會提供相同的字典。

locals() 提供一個字典,但其行為依賴於上下文。在函數內,它會傳回呼叫時存在的局部變數和閉包變數的字典。該字典不是動態更新的,因此函數呼叫後局部變數的變​​更不會反映在其中。但是,向字典賦值不會更新局部變數。在函數之外,locals() 傳回用作目前命名空間的實際字典,允許反射和更新。

vars() 提供多種功能。當不帶參數呼叫時,它的行為類似於 locals(),傳回目前名稱空間的字典。然而,它的主要區別在於它能夠接受物件作為參數,在這種情況下,它會傳回該物件的 dict 屬性。 dict 通常用於儲存物件的屬性數據,包括類別變數和模組全域變數。

更新對結果的影響

更新字典globals()、locals() 或 vars() 傳回的值通常對對應的命名空間或物件沒有影響。對於 globals(),對字典所做的任何更改都不會改變模組的全域變數。對於 locals(),字典不會隨著局部變數的變​​更而動態更新,也不會透過對其條目的賦值來更新。在 vars() 的情況下,字典的更新不會影響引用物件的屬性。

需要注意的是,Python 版本和實作會影響這些函數的行為,而此處提供的詳細資訊可能會有所不同取決於特定環境。

以上是在 Python 中,「globals()」、「locals()」和「vars()」對命名空間的存取有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn